日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達者為師

網(wǎng)站首頁 編程語言 正文

Go語言依賴管理三要素示例解析_Golang

作者:啵啵腸 ? 更新時間: 2023-03-17 編程語言

背景

開發(fā)項目時應(yīng)學(xué)會站在巨人的肩膀上,即有效利用開發(fā)組件進行或工具提升自己的研發(fā)效率

對于較簡單的單體函數(shù)而言,只需要依賴原生的SDK即可完成開發(fā)

對于實際開發(fā)的工程較于復(fù)雜,應(yīng)將精力投放在實現(xiàn)的業(yè)務(wù)邏輯之上

  • 工程項目不可能基于標準庫0-1編碼搭建
  • 管理依賴庫

GOPATH 模式

GOPATH為環(huán)境變量 包含bin、pkg、src三部分

$GOPATH:項目根路徑

  • src:項目源代碼
  • bin:項目編譯的二進制文件 可執(zhí)行程序
  • pkg:項目編譯的中間產(chǎn)物 加速編譯 第三方依賴包

運行方式:

所有工程代碼要求放在GOPATH/src目錄下 工程本身也將作為一個依賴包,可以被其它 GOPATH/src 目錄下的工程引用 在 $GOPATH/src下進行 .go 文件或源代碼的存儲,我們可以稱其為 GOPATH 的模式

缺點:

  • 沒有版本控制的概念
  • 所有項目都要放在$GOPATH/src目錄下,不在當前目錄則不能編譯

GO Vendor模式

解決 GOPATH模式 所有項目都在$GOPATH/src目錄的問題 可以隨處可以創(chuàng)建項目,不用扎堆 src 目錄下

原理:本地化構(gòu)建

在每個項目下都創(chuàng)建一個vendor目錄,每個項目所需要的以來都會下載到自己的vendor目錄下。在使用包時,會先從當前項目下的vendor目錄查找,然后再從GOPATH中查找,都沒有找到最后才在GOROOT中查找(依賴尋址方式:vendor -> GOPATH)

缺點:

  • 放棄了依賴重用,使得冗余度上升
  • 無法控制依賴的版本 更新項目可能出現(xiàn)依賴沖突 導(dǎo)致編譯出錯

Go Module模式

1.16版本后默認開啟的模式

通過go.mod文件管理依賴的版本

通過go get/go mod指令工具管理依賴包

工程不用全放在gopath/src目錄下

定義版本規(guī)則和管理項目依賴關(guān)系

主要改動:

  • GO MODULE模式下所有依賴的包存放在$GOPATH/pkg/mod目錄下
  • 項目中需要有go.mod文件,來應(yīng)用$GOPATH/pkg/mod

依賴管理三要素

  • 配置文件 描述依賴 go.mod
  • 中心倉庫管理依賴庫 Proxy
  • 本地工具 go get/mod

依賴配置 go.mod

module example.com/foobar
go 1.16
require (
    example.com/apple v0.1.2
    example.com/banana v1.2.3
    example.com/banana/v2 v2.3.4
    example.com/pineapple v0.0.0-20190924185754-1b0db40df49a
)
exclude example.com/banana v1.2.4
replace example.com/apple v0.1.2 => example.com/rda v0.1.0 
replace example.com/banana => example.com/hugebanana

go.mod 是啟用了 Go moduels 的項目所必須的最重要的文件,它描述了當前項目(也就是當前模塊)的元信息,每一行都以一個動詞開頭,目前有以下 5 個動詞:

  • module:用于定義當前項目的模塊路徑。
  • go:用于設(shè)置預(yù)期的 Go 版本。
  • require:用于設(shè)置一個特定的模塊版本。
  • exclude:用于從使用中排除一個特定的模塊版本。
  • replace:用于將一個模塊版本替換為另外一個模塊版本。

這里的填寫格式基本為包引用路徑+版本號,另外比較特殊的是 go $version,目前從 Go1.16 的代碼里來看,還只是個標識作用,暫時未知未來是否有更大的作用。

go mod命令

常用的go mod命令如下:

go mod download    下載依賴的module到本地cache(默認為$GOPATH/pkg/mod目錄)
go mod edit        編輯go.mod文件
go mod graph       打印模塊依賴圖
go mod init        初始化當前文件夾, 創(chuàng)建go.mod文件
go mod tidy        增加缺少的module,刪除無用的module
go mod vendor      將依賴復(fù)制到vendor下
go mod verify      校驗依賴
go mod why         解釋為什么需要依賴 

go get命令

在項目中執(zhí)行g(shù)o get命令可以下載依賴包,并且還可以指定下載的版本。

  • 運行g(shù)o get -u將會升級到最新的次要版本或者修訂版本(x.y.z, z是修訂版本號, y是次要版本號)
  • 運行g(shù)o get -u=patch將會升級到最新的修訂版本
  • 運行g(shù)o get package@version將會升級到指定的版本號version 如果下載所有依賴可以使用go mod download命令。

快速使用go module

  • SET GOPROXY=goproxy.cn (這是win環(huán)境下的) export GOPROXY=goproxy.cn (這是mac環(huán)境下的)
  • go mod init [包名] // 初始化項目(如果你是初始化項目直接 go mod init 就好了)
  • 在目錄文件下會生成go.mod和go.sum文件 go.mod 里面包含了所有的包!
  • 在文件里面引入包名的時候有的編輯器會報錯但是是可以正常編譯的
  • 下載包使用go get
  • 修改包的版本號直接去go.mod文件修改然后go mod download

小結(jié)

今天學(xué)習(xí)到的內(nèi)容還需要進一步的消化,我也是打算將并發(fā)編程這一塊的內(nèi)容熟悉透徹了再進行下一部分的課程學(xué)習(xí)。如果筆記中有錯誤的地方也希望掘友們可以及時的提出糾正。

原文鏈接:https://juejin.cn/post/7190051371129765925

欄目分類
最近更新