go mod 使用时的问题(指定版本)

先简单描述一下问题:
现在,我在开发go的项目中,用到了两个包 A@v1.1 和 B@v3.1,此时这两个包是可以相互支持的;

两天后(就是这个意思不一定真的是两天还有可能是两个月),A版本更新了,A@v1.3了,B的版本依然没有更新;而且A@v1.3与B@v3.1 不相互支持了,此时我们在项目中 进行 go mod tidy的时候,就会把最A的新的版本down下来,项目就会报错;

我们需要解决的问题就是,在使用go mod 的时候,指定在我们所需要的版本,不让他们随意更新

我们进行 go mod init 之后,进行第三方包的引入,go.mod文件一般是如下:

module demo

go 1.15

require (
	github.com/kataras/iris/v12 v12.2.0-alpha2
)

我们简单举一个例子 iris的版本为 v12.2.0-alpha2

这是我们在第一次引入的版本号;

那我想一直使用这个版本呢?

那我们直接在go.mod文件添加如下设置就可以指定他的版本号,不会自动更新

module demo

go 1.15

require (
	github.com/kataras/iris/v12 v12.2.0-alpha2
)


replace (
	github.com/kataras/iris/v12 => github.com/kataras/iris/v12 v12.2.0-alpha2
)

使用 replace 关键字 指定需要的包的版本号 就OK了;

在此,就多讲一点点吧,关于go env 和 go mod 的事情

在 go env 中有这两个参数:

GO111MODULE="on"
GOMODCACHE="/XXX/XXX/go/pkg/mod"

我不知道大家平时关注不关注这两个参数,在此我就简单记录一下

GO111MODULE 他有三个值:
on : go命令行会使用modules,不会去GOPATH目录下查找;而是去GOMODCACHE 这个地方查找
off : go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。
auto:默认值,使用该方式时,go命令行将会根据当前目录来决定是否启用module功能。

可以直接设置:
go env -w GO111MODULE=on
或者可以写成:
export GO111MODULE=on

在继续探讨:GOMODCACHE
这个就是 你在使用mod 来管理项目依赖的时候,下载的第三方包的存储目录,如果你不想使用 go mod,我想使用最平常的来管理项目的依赖,那你就吧这个文件夹下的所有依赖全部复制粘贴到你的GAOPATH下,项目就可以找到它所需的第三方的依赖了。

再继续添加知识点:

go mod download  //下载依赖包
go mod edit  //工具或脚本编辑go.mod
go mod graph  //打印模块依赖图
go mod init  //在当前目录初始化mod
go mod tidy  //拉取缺少的模块,移除不用的模块。
go mod vendor  //将依赖复制到vendor下
go mod verify  //验证依赖是否正确
go mod why  //解释为什么需要依赖
go list -m -json all  //依赖详情
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值