Go Modules 历史变迁
Go 分类文章,学习笔记,会不定时修改,补充,纠错,增加内容,路漫漫。
两种包管理运行模式
- GOPATH mode,从
vendor
和GOPATH
下寻找依赖,依赖会被下载至GOPATH/src
目录下 - module-aware mode
Go 1.11 – 2018.8
正式推出 go modules ,可以查看 go help modules
获取相关信息
GO111MODULE
新增的环境变量,用于控制 Go 代码包管理运行模式
1 | For more fine-grained control, the module support in Go 1.11 respects |
- GO111MODULE = auto,默认值(设置为 auto 或者不设置)
- 在 GOPATH/src 目录外,且文件夹包含 go.mod 文件,就运行 module-aware mode,其余情况都是 GOPATH mode
- GO111MODULE = on,开启
- 不管目录所在路径,都是 module-aware mode
- 运行 go build 等命令,会优先判断 go.mod 是否存在,不存在的话,先创建 go.mod 文件
- GO111MODULE = off,关闭
- 任何情况下,都关闭
包下载路径
- module-aware mode 在
GOPATH/pkg/mod
目录下 - GOPATH mode 在
GOPATH/src
目录下
Go Get
运行在不同 mode 下,行为不同
- module-aware mode 会修改 go.mod 文件
- GOPATH mode ,按照之前的行为运行
Go Get 存在的问题
如果 GO111MODULE = on ,且当前目录没有 go.mod 文件,会报错 go: cannot find main module; see 'go help modules'
vendor 目录支持
运行 go mod vendor
,会在当前目录生成 vendor 目录,从 GOPATH/pkg/mod 复制 packge 过来
运行命令类似,go build -mod=vendor
加上 -mod=vendor
,会使用 vendor 目录下依赖,否则还是使用 GOPATH/pkg/mod 下依赖
GOPROXY
新增 GOPROXY 环境变量,用于设置 go module 下载代理地址