golang內置包管理工具go mod簡明教程


go mod

go buildin package manager.

go mod是go語言內置的包管理工具,集成在go tool中,安裝好go就可以使用。

要求: go version >= 1.11

官方文檔: https://tip.golang.org/cmd/go...

環境變量

# 通過環境變量GOPROXY設置代理
export GOPROXY=https://goproxy.io # go mod功能開關,默認是auto,在gopath中不啟用 # 可設置為on強制啟用 export GO111MODULE=on

go mod init

初始化

update:init現在已經做了優化
go mod init <module-name>


init報錯outside gopath no import comments

# 方法一 手動創建go.mod文件, 寫入module xxx
echo 'module xxx' > go.mod # 方法二 main包加入import聲明 package main // import "xxx"

go mod download

下載依賴

go mod tidy

同步依賴包,添加需要的,移除多余的

go mod vendor

將依賴包放入vendor

go get 下載/升級依賴

go mod不再下載源碼進$GOPATH/src

go mod的下載目錄在$GOPATH/pkg/mod,並且是文件權限是只讀的-r--r--r--

# tag必須以v開頭 v1.2.3格式
go get -u xxx.com/pkg@2.1.0

vendor 模式

go mod是不推薦使用vendor目錄的,而是直接使用source或cache中的包。

module mode下默認忽略vendor目錄。通過flag-mod=vendor設置vendor模式,依賴只從頂層的vendor中查找。可以通過環境變量GOFLAGS=-mod=vendor來設置flag。

https://github.com/golang/go/...

vendor模式下get報錯

goland編輯器勾選vender后會開啟vendor模式。

# go get: disabled by -mod=vendor

# mod有三個取值 # mod can be '', 'readonly', or 'vendor' # 兩種賦值方式都可以 -mod='' -mod ''

replace

讓原本依賴的 github.com/repo/pkg 包,實際使用 github.com/your-fork/pkg@v。

go mod edit -replace old[@v]=new[@v]

# 如果不是replace本地包,必須帶上版本號
go mod edit -replace golang.org/x/crypto=github.com/golang/crypto@v0.0.0-20190621222207-cc06ce4a13d4
# go.mod
replace golang.org/x/crypto => github.com/golang/crypto v0.0.0-20190621222207-cc06ce4a13d4 replace golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4 => github.com/golang/crypto v0.0.0-20190621222207-cc06ce4a13d4

清緩存

go clean -modcache

go.mod & go.sum

go.mod:依賴列表和版本約束。

go.sum:記錄module文件hash值,用於安全校驗。

最佳實踐

  • go mod不推薦使用vendor,不要將vendor提交到版本控制。
  • CICD等場景下載vendor不方便時,使用vendor可能會更好。也可以考慮搭建nexus golang repo。


免責聲明!

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



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