2.23 Go之go mod包依賴管理工具使用詳解


2.23 Go之go mod包依賴管理工具使用詳解

go module

Go語言默認的依賴管理工具

使用module

  • 設置GOMODULE


設置GoModule

  • GOMODULE=off禁用go module,編譯時會從GOPATHvendor文件夾中查找包;

  • GOMODULE=on啟用 go module,編譯時會忽略GOPATHvendor文件夾,只根據go.mod下載依賴;

  • GOMODULE=auto(默認值),當項目在 GOPATH/src 目錄之外,並且項目根目錄有go.mod文件時,開啟go module

Windows下設置:

set GO111MODULE = on 或者 set GO111MODULE = auto

MacOS或者Linux下設置:

export GO111MODULE = on 或者 export GO111MODULE = auto

go mod命令

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

GOPROXY

proxy代理服務器。國內有防火牆存在,所以有些第三方包無法通過go get獲取。所以需要設置GOPROXY通過中間代理商獲取到相應的資源。

目前公開的代理服務器:

  • goproxy.io

  • goproxy.cn:(推薦)由國內的七牛雲提供。

windows下設置:

go env -w GOPROXY=https://goproxy.cn,direct // 域名

MacOs或者Linux下設置:

export GOPROXY=https://goproxy.cn

使用go get下載指定版本的依賴包

執行go get命令,在下載依賴包的同時還可以指定依賴包的版本。

  • 運行go get -u命令會將項目中的包升級到最新的次要版本或者修訂版本;

  • 運行go get -u=patch命令會將項目中的包升級到最新的修訂版本;

  • 運行go get [包名]@[版本號]命令會下載對應包的指定版本或者將對應包升級到指定的版本。

go get [包名]@[版本號]命令中版本號可以是 x.y.z 的形式,例如 go get foo@v1.2.3,也可以是 git 上的分支或 tag,例如 go get foo@master,還可以是 git 提交時的哈希值,例如 go get foo@e3702bed2。

在項目中使用

使用Goland新建項目會初始化一個go.mod文件。go.mod文件一旦創建后,它的內容將會被go toolchain全面掌控,go toolchain 會在各類命令執行時,比如go getgo buildgo mod等修改和維護go.mod文件。

go.mod提供了modulerequirereplaceexclude四個命令:

  • module語句指定包的名字(路徑);

  • require語句指定的依賴項模塊;

  • replace語句可以替換依賴項模塊;

  • exclude語句可以忽略依賴項模塊。

升級依賴:

使用命令go list -m -u all來檢查可以升級的 package,使用go get -u need-upgrade-package升級后會將新的依賴版本更新到 go.mod * 也可以使用go get -u升級所有依賴

使用replace替換無法直接獲取的package

modules可以通過在go.mod文件中使用replace指令替換成github上對應的庫

replace (
   golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a => github.com/golang/crypto v0.0.0-20190313024323-a1f597ede03a
)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM