Golang Go语言中 go mod tidy 可能会修改指定的依赖版本号?

是这样的,我在 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


Golang Go语言中 go mod tidy 可能会修改指定的依赖版本号?

更多关于Golang Go语言中 go mod tidy 可能会修改指定的依赖版本号?的实战教程也可以访问 https://www.itying.com/category-94-b0.html

6 回复

-mod=readonly ,这是 go module 系统的坑,或者说是 anti-intuitive 的地方。根本上,go mod 是不支持锁定小版本的。

更多关于Golang Go语言中 go mod tidy 可能会修改指定的依赖版本号?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


会,这个是系统根据规则更改的,官方文档有介绍

go mod 的最小版本号选择的其实是选择所有 package 指定的 mod 的最大版本号
你指定了 v2.1.0, 但是依赖的某一个包指定了 v2.2.1, 最终编译就使用 v2.2.1 来编译

使用 replace 强行指定版本吧,这个自动升级太坑了,以前遇到一个库升级以后有个接口抛 panic,都无力吐槽了





# 谢谢各位大佬支招,三楼应该说明白了问题
# 我本地项目的依赖关系是这样的
# A <-- B <-- [email protected]
# A <-- [email protected]
# 最终导致 mod tidy 之后,module B 被升级到了 module A 依赖的高版本

在Go语言中,go mod tidy 命令确实有可能修改项目中的依赖版本号。这个命令的主要作用是调整 go.modgo.sum 文件,以确保它们与项目实际使用的依赖版本保持一致。

当你运行 go mod tidy 时,Go 工具链会分析你的项目代码,包括所有的 import 语句,来确定实际需要的依赖及其版本。然后,它会更新 go.mod 文件,移除不再需要的依赖项,并添加缺失的依赖项,同时可能会调整依赖的版本号以匹配实际使用的版本。

这种调整通常发生在以下几种情况:

  1. 依赖升级:如果你的代码中使用了某个依赖的新功能或API,而这些功能或API在旧版本中不存在,go mod tidy 可能会将依赖升级到包含这些功能或API的版本。

  2. 间接依赖版本冲突:如果你的项目依赖了多个库,而这些库又依赖了相同但版本不同的第三方库,go mod tidy 会尝试选择一个兼容的版本。

  3. 移除不再需要的依赖:如果某个依赖在你的代码中不再被使用,go mod tidy 会将其从 go.mod 文件中移除。

因此,在运行 go mod tidy 后,建议仔细检查 go.mod 文件的变更,以确保所有依赖都符合预期。如果发现有不符合预期的变更,可以手动调整 go.mod 文件,并再次运行 go mod tidy 以确保一致性。

回到顶部