golang的mod是go 1.11开始,go推出的版本管理工具。
可以通过 go env -w GO111MODULE=xxx 来设置。
默认有三个值:auto/off/on。
GO111MODULE=auto 在 $GOPATH/src 外面且根目录有 go.mod 文件时,开启模块支持。
# 实际测试在src里面也无所谓,也可以用。
GO111MODULE=off 无模块支持,go 会从 GOPATH 和 vendor 文件夹寻找包。
GO111MODULE=on 模块支持,go 会忽略 GOPATH 和 vendor 文件夹,只根据 go.mod 下载依赖。
举个例子:
1、如果你用了 GO111MODULE=on,则如果要用到外部的依赖,则需要go mod init xxx来创建一个module,否则你用不了外部的依赖。
2、如果你用了GO111MODULE=off,依赖的获取跟go.mod没有关系,就是从$GOPATH下(或者vendor 这个没有测试过)去获取。
3、如果用了 GO111MODULE=auto,会检测 当前目录是否有go.mod,有的话 会依赖go.mod中的依赖,没有的话,则去$GOPATH下获取。
推荐的做法:
1、打开goland的 go modules integration
2、每次用到外部依赖时,
go mod init xxx
go get -u github.com/sirupsen/logrus
这样goland和编译时,都可以使用。
常见的问题如果设置 go env -w GO111MODULE=auto 时遇到错误,例如:
does not override conflicting OS environment varia
问题在于:
1、系统环境变量中已经有了GO111MODULE的值
2、go env会优先选择系统环境变量中的值。
解决办法:go env | grep GO111 # 查看当前设置的值
echo $GO111MODULE # 查看系统中设置的值
export GO111MODULE=off # 修改
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)