go mod tidy 可能会修改指定的依赖版本号?

2022-05-21 17:20:20 +08:00
 kinboy

是这样的,我在 go.mod 中指定了一个依赖的版本号,例如 github.com/foo/bar v2.1.0

当我执行 go mod tidy 之后 go.mod 中这个依赖的版本号发生了自动修改,变成了 github.com/foo/bar v2.2.1

go version 是 1.17.6

4876 次点击
所在节点    Go 编程语言
5 条回复
iamzuoxinyu
2022-05-21 18:07:55 +08:00
-mod=readonly ,这是 go module 系统的坑,或者说是 anti-intuitive 的地方。根本上,go mod 是不支持锁定小版本的。
janxin
2022-05-21 21:24:30 +08:00
会,这个是系统根据规则更改的,官方文档有介绍
SorcererXW
2022-05-22 01:07:29 +08:00
go mod 的最小版本号选择的其实是选择所有 package 指定的 mod 的最大版本号
你指定了 v2.1.0, 但是依赖的某一个包指定了 v2.2.1, 最终编译就使用 v2.2.1 来编译
stevenbipt
2022-05-23 09:45:01 +08:00
使用 replace 强行指定版本吧,这个自动升级太坑了,以前遇到一个库升级以后有个接口抛 panic,都无力吐槽了
kinboy
2022-05-23 11:26:59 +08:00
@iamzuoxinyu
@janxin
@SorcererXW
@stevenbipt
# 谢谢各位大佬支招,三楼应该说明白了问题
# 我本地项目的依赖关系是这样的
# A <-- B <-- C@v2.2.1
# A <-- C@v2.1.0
# 最终导致 mod tidy 之后,module B 被升级到了 module A 依赖的高版本

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/854360

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX