go从1.11版本后就开始支持Modules了,但在1.13版本后加入了GOPROXY后才把go mod在国内带上了巅峰。
GO111MODULE 开关
GO111MODULE 有三个值:off, on和auto(默认值)。
- GO111MODULE=off,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。
- GO111MODULE=on,go命令行会使用modules,而一点也不会去GOPATH目录下查找。
- GO111MODULE=auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形:
1) 当前目录在GOPATH/src之外且该目录包含go.mod文件
2) 当前文件在包含go.mod文件的目录下面。
go mod 命令
命令 | 说明 |
---|---|
down | loaddownload modules to local cache(下载依赖包) |
edit | edit go.mod from tools or scripts(编辑go.mod) |
graph | print module requirement graph (打印模块依赖图) |
init | initialize new module in current directory(在当前目录初始化mod) |
tidy | add missing and remove unused modules(拉取缺少的模块,移除不用的模块) |
vendor | make vendored copy of dependencies(将依赖复制到vendor下) |
verify | verify dependencies have expected content (验证依赖是否正确) |
why | explain why packages or modules are needed(解释为什么需要依赖) |
设置代理
在终端输入下面语句就可以了
$ go env -w GO111MODULE=on
$ go env -w GOPROXY=https://goproxy.io
也可以把GOPROXY配置成环境变量。
除了goproxy.io之外,还有几个比较快的:
项目中使用
进入项目目录中,使用go mod init
就可以创建一个新的go.mod了
执行 go run
、go build
时,如果项目中有go.mod或GO111MODULE=on,则会自动查找依赖自动下载。
使用go mod tidy
来拉取缺少的模块,移除不用的模块
go get 升级
- 运行 go get -u 将会升级到最新的次要版本或者修订版本(x.y.z, z是修订版本号, y是次要版本号)
- 运行 go get -u=patch 将会升级到最新的修订版本
- 运行 go get package@version 将会升级到指定的版本号version
- 运行go get如果有版本的更改,那么go.mod文件也会更改