go官方包依赖管理工具之mod
作者:互联网
1.1、go mod是什么
go mod 是Golang 1.11 版本引入的官方包(package)依赖管理工具,用于解决之前没有地方记录依赖包具体版本的问题,方便依赖包的管理。
之前Golang 主要依靠vendor和GOPATH来管理依赖库,vendor相对主流,但现在官方更提倡go mod。
1.2、go mod初始化及使用
下载官方包1.11(及其以上版本将会自动支持gomod) 默认GO111MODULE=auto(auto是指如果在gopath下不启用mod)
Golang 提供一个环境变量 GO111MODULE 来设置是否使用mod,它有3个可选值,分别是off, on, auto(默认值),具体含义如下:
off: 查找vendor和gopath目录 on: 使用gomodule 忽略gopath目录 auto: 如果当前目录不在gopath目录并且当前目录下有go.md文件, 则使用GO111MODULE,否则使用GOPATH mode
修改 GO111MODULE 的值的语句是:set GO111MODULE=on
在使用模块的时候, GOPATH
是无意义的,不过它还是会把下载的依赖储存在 GOPATH/src/mod
中,也会把 go install
的结果放在 GOPATH/bin
(如果 GOBIN
不存在的话)
go mod download 下载模块到本地缓存, 缓存路径:$GOPATH/pkg/mod/cache go mod edit 提供了命令版编辑go.mod的功能, 例如 go mod edit -fmt go.mod 会格式化go.md go mod graph 把模块之间的依赖图展示出来 go mod init 初始化模块 go mod tidy 增加缺失的包, 移除无用的包 go mod vendor 把依赖拷贝到vendor目录下 go mod verify 确认依赖关系 go mod why 解释为什么需要包和模块
注意有几个坑的地方:
go mod 命令在 $GOPATH 里默认是执行不了的,因为 GO111MODULE 的默认值是 auto。默认在$GOPATH 里是不会执行, 如果一定要强制执行,就设置环境变量为 on。
go mod init 在没有接module名字的时候是执行不了的,会报错 go: cannot determine module path for source directory。可以这样执行:
go mod init github.com/lanlang/hello
更多命令:
# 查看module下的所有依赖 go list -m all # 更新为执行版本依赖 go get rsc.io/sampler@v1.3.1 # 将依赖复制到项目目录vendor文件夹下 go mod vendor # 忽略cache中的包, 只使用vendor目录中的依赖进行编译 go build -mod=vendor # 开启module windows: set GO111MODULE=on linux: export GO111MODULE=on
标签:GOPATH,GO111MODULE,依赖,vendor,管理工具,go,mod 来源: https://www.cnblogs.com/xingxia/p/go_module.html