go mod #
go mod是go内置的包管理工具,项目管理工具
Golang 1.11 版本引入的 go mod ,其思想类似maven:摒弃vendor和GOPATH,拥抱本地库
从Go1.13版本开始,go module将是Go语言默认的依赖管理工具
查看go版本:go version
命令帮助: go help mod
Usage:
go mod <command> [arguments]
The commands are:
download download modules to local cache 下载依赖模块到本地cache目录中(GOPATH/pkg/mod),如 go mod download
edit edit go.mod from tools or scripts 编辑go.mod文件
graph print module requirement graph 打印模块依赖图
init initialize new module in current directory,在当前目录初始化一个新模块,生成go.mod文件,如 go mod init hello
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解释为什么需要依赖
Use "go help mod <command>" for more information about a command. 如:go help mod init
初始化一个go.mod配置:
localhost:ttt jelly$ go mod init hello
go: creating new go.mod: module hello
localhost:ttt jelly$ ls
go.mod
localhost:ttt jelly$ cat go.mod
module hello
go.mod 在项目根目录下,用于配置项目依赖,记录了依赖包及其版本号,go.mod文件配置格式如下:
module 模块名,如 module hello
require ( //指定的依赖项模块,可选
github.com/BurntSushi/toml v0.3.1 //配置依赖模块地址和版本,多个配置多行
github.com/DataDog/zstd v1.3.5
)
replace ( //替换依赖项模块,可选
)
exclude ( //忽略依赖项模块,可选
)
go.sum 记录所依赖的项目的版本的锁定,类似composer-lock.json,package-lock.json文件
执行go build , go test, 甚至 go list等命令时,会自己去修改go.mod文件,配置项目的依赖
环境变量:export GO111MODULE=on #有三个值:on、off、auto,默认值为auto
off: 关闭模式,GOPATH mode,表示查找vendor和GOPATH目录,使用$GOPATH方式管理依赖
on:启动模式,module-aware mode,使用 go module模式,忽略GOPATH目录,依赖包下载到$GOPATH/pkg/mod
auto:自动模式,项目在$GOPATH/src之外则使用go.mod方式,项目在$GOPATH/src目录下则使用旧方式