go module
简介
go1.11发布后,出现了一个实验中的go module,项目的运行可以不再依赖 GOPATH,项目目录可以放在任何的目录下面,所有项目依赖的 packages 全部下载到 $GOPATH/pkg/mod/cache 下 or $GOROOT/pkg/mod/cache 下面统一管理。
开启 go module(模块)
通过环境变量 GO111MODULE 来控制是否使用 go mod 方式来管理包。 GO111MODULE 可以设置为三个字符串值之一:off,on或auto(默认值)。
off 不使用模块,使用 “ GOPATH 模式”。
on 使用模块,只根据 go.mod 下载依赖。
auto 同时满足下面两个条件开启模块模式
1) 仅当当前目录位于 $GOPATH/src 之外
2) 并且其本身包含 go.mod 文件或位于包含 go.mod 文件的目录下时
初始化
go mod init github.com/aa/bb (初始化模块的名字)
执行完该命令之后,会生成两个文件 go.mod 和 go.sum。go.mod 文件用来定义当前模块的依赖和依赖版本,也可以排除依赖和替换依赖。module github.com/aa/bb 会放在 go.mod 文件的第一行,以 github.com/aa/bb 开头的包会从项目内部查找而不是从远程拉取。go.sum 则是描述依赖树锁定。模块(go module)根目录和其子目录的所有包构成模块,在根目录下存在 go.mod 文件,子目录会向着父目录、爷目录一直找到 go.mod 文件。
模块路径指模块根目录的导入路径,也是其他子目录导入路径的前缀。
其他常用的 go mod 命令
edit 编辑go.mod文件
tidy 增加丢失的module,去掉未用的module
verify 校验依赖
注意:当不知道包的版本时,go mod edit -require=golang.org/x/[email protected], 不能用 latest 代替 v0.0.0
配置 GoLand
默认编辑器是在 GOPATH 寻找依赖包的,需要在编辑器配置开启 go module,关闭 GOPATH 才会按照 go module 的规则寻找依赖包。
不使用 GOPATH
开启 go mod