对于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
能够看出项目库会对每一个版本建立一个文件夹,文件夹下有对于版本的信息。