目录
可以通过 go help modules命令查看关于go mod的更多信息,也可以直接访问https://github.com/golang/go/wiki/Modules 获取更多信息。
GO 1.11 包依赖管理
在Go 1.11 (Go 1.11 发布于 2018-11-21 日) 版本之前的Go user官方调查中,Gopher抱怨最多的三大问题如下:
- 包依赖管理
- 缺少泛型
- 错误处理
而Go 1.11开启了问题1:包依赖管理解决的实验。
环境变量的设置
在go1.11和go1.12版本中,因为没有将gomod设置为默认包管理方式,增加了一个临时环境变量GO111MODULE
来控制使用方式。这个环境变量有三种设置方式:off、on、auto
off
,则go命令从不使用go modules的功能,在执行go命令时将继续在GOPATH中查找依赖包,继续使用老的GOPATH模式auto
,当go源码不在GOPATH路径下且当前目录或者上层目录存在go.mod文件时,启用gomod模式,否则将使用GOPATH模式on
,则go命令使用go mod模式,命令执行过程中将忽略GOPATH的设置,按照gomod的方式管理go程序
需要通过两个临时的环境变量设置默认支持go mod模式
export GO111MODULE=on
export GOPROXY=https://goproxy.io
go mod文件 位置
项目得在GOPATH以外的任意目录
go mod 命令介绍
当项目运行在go mod模式下时,执行go相关的命令run build test get等会下载或者更新项目依赖的包。
一般情况,go mod init
和 go mod tidy
两个命令就够用了。
download
:下载依赖的包到本地缓存目录edit
:编辑go.mod文件graph
:打印模块输出图init
:初始化modules项目tidy
:添加缺失的依赖或者移除未使用的依赖vendor
:生成vendor依赖目录verify
:验证依赖是否正确why
:解释为什么需要相关依赖
go mod 管理的包文件位置
$GOPATH/pkg/mod里面,mod做了一件类似maven的事把所有包都打上了版本号;
go.mod文件样例
module zctc_knowledge
go 1.14
require (
github.com/astaxie/beego v1.12.2
github.com/go-sql-driver/mysql v1.5.0
github.com/lib/pq v1.7.0 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.1 // indirect
github.com/mojocn/base64Captcha v1.3.1
github.com/smartystreets/goconvey v1.6.4
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550
golang.org/x/image v0.0.0-20190802002840-cff245a6509b // indirect
golang.org/x/text v0.3.2 // indirect
gopkg.in/yaml.v2 v2.3.0 // indirect
)