對於Go的版本管理主要用過 glide,下面介紹 Go 1.11 以後官方支持的版本管理工具 mod。html
關於 mod 官方給出了三個命令 go help mod
、go help modules
、go help module-get
幫助瞭解使用。git
能夠用環境變量 GO111MODULE
開啓或關閉模塊支持,它有三個可選值:off、on、auto,默認值是 auto。github
GO111MODULE=off
無模塊支持,go 會從 GOPATH 和 vendor 文件夾尋找包。GO111MODULE=on
模塊支持,go 會忽略 GOPATH 和 vendor 文件夾,只根據 go.mod 下載依賴。GO111MODULE=auto
在 $GOPATH/src 外面且根目錄有 go.mod 文件時,開啓模塊支持。在使用模塊的時候,GOPATH 是無心義的,不過它仍是會把下載的依賴儲存在 $GOPATH/pkg/mod 中,也會把 go install 的結果放在 $GOPATH/bin 中。golang
download download modules to local cache (下載依賴的module到本地cache)) edit edit go.mod from tools or scripts (編輯go.mod文件) graph print module requirement graph (打印模塊依賴圖)) init initialize new module in current directory (再當前文件夾下初始化一個新的module, 建立go.mod文件)) tidy add missing and remove unused modules (增長丟失的module,去掉未用的module) vendor make vendored copy of dependencies (將依賴複製到vendor下) verify verify dependencies have expected content (校驗依賴) why explain why packages or modules are needed (解釋爲何須要依賴)
在一個新的項目中,須要執行go mod init
來初始化建立文件go.mod
,go.mod
中會列出全部依賴包的路徑和版本。json
module github.com/xfstart07/watcher require ( github.com/apex/log v1.0.0 github.com/fatih/color v1.7.0 // indirect github.com/fsnotify/fsnotify v1.4.7 github.com/go-ini/ini v1.38.2 github.com/go-kit/kit v0.7.0 github.com/go-logfmt/logfmt v0.3.0 // indirect
indirect
表示這個庫是間接引用進來的。緩存
go mod vendor
命令能夠在項目中建立 vendor
文件夾將依賴包拷貝過來。ide
go mod download
命令用於將依賴包緩存到本地Cache起來。工具
go list -m -json all
-json
JSON格式顯示all
顯示所有庫默認在$GOPATH/pkg
下面:ui
$GOPATH/pkg/mod
咱們來看看一個項目下載下來的文件形式:code
➜ mod ls -lh cache/download/github.com/go-kit/kit/@v/ total 3016 -rw-r--r-- 1 a1 staff 7B Sep 29 15:37 list -rw------- 1 a1 staff 50B Sep 29 15:37 v0.7.0.info -rw------- 1 a1 staff 29B Sep 29 15:37 v0.7.0.mod -rw-r--r-- 1 a1 staff 1.5M Sep 29 15:37 v0.7.0.zip -rw-r--r-- 1 a1 staff 47B Sep 29 15:37 v0.7.0.ziphash
能夠看出項目庫會對每一個版本建立一個文件夾,文件夾下有對於版本的信息。