V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
body007
V2EX  ›  Go 编程语言

go mod tidy 总是安装最新依赖,如何查找哪个模块导致某个包安装最新依赖,提供一个小工具

  •  
  •   body007 · 2023-10-21 11:41:38 +08:00 · 1283 次点击
    这是一个创建于 417 天前的主题,其中的信息可能已经有所发展或是发生改变。

    安装: go install github.com/jan-bar/interesting/findModVer@latest

    执行:findModVer d:\myproject

    结果如下图所示:

    根据结果可以找到哪个依赖导致google.golang.org/grpc v1.45.0使用了这个版本,这样每次执行go mod tidy会自动修改该模块到v1.45.0版本。我看了下github.com/spf13/viper v1.11.0就是用的google.golang.org/grpc v1.45.0版本,因此我可以通过限制viper v1.11.0来限制grpc v1.45.0,这时候执行go mod tidy就会限制grpc v1.45.0。通过我这个小工具可以方便的找到哪些库是因为哪个库导致go mod tidy后修改自己模块的该库到最新版本。

    当前也可以在自己库里用如下方法限制版本,但如果该库是公共库,其他人使用时也需要加上这个限制。

    replace (
    	google.golang.org/grpc => google.golang.org/grpc v1.45.0
    )
    
    4 条回复    2023-10-21 19:18:14 +08:00
    sofukwird
        1
    sofukwird  
       2023-10-21 12:35:29 +08:00 via Android
    新版本 v1 总是兼容旧的 v1 ,要不兼容时发 v2 版本,golang 的版本管理就是这么设定的,如果你用的库不遵循这条规则建议使用遵循该规则的库或者 fork
    body007
        2
    body007  
    OP
       2023-10-21 13:48:24 +08:00
    @sofukwird 其实我是想升级一些库,结果 go mod tidy 把另一个库也更新了,我不知道是哪个库升级导致的。最终找到是 viper 这个库导致的。最终我把 viper 设置为旧版本,这个版本 viper 和我当前项目用的 grpc 是同一个版本。

    我也觉得你说的对,但是像 grpc 这么基础的库,1.45.0 和当前最新版 1.59.0 也是 v1 版吧,里面有的结构体和对象都不兼容。导致我编译失败,最终找到原因还是 viper 这个配置文件库依赖的 grpc 用了新版本导致。

    经验告诉我没事别乱升级🤣🤣🤣
    lance6716
        3
    lance6716  
       2023-10-21 18:38:40 +08:00 via Android
    是不是 go mod why 的功能
    body007
        4
    body007  
    OP
       2023-10-21 19:18:14 +08:00
    @lance6716 确切的说是 go mod 机制的问题,更确切的说是有些库不安规范修改代码。按照 semver 版本号规范来说 v1.x.x -> v1.y.y 不应该有不兼容更新。但我就遇到这种问题,还是 grpc 库的问题。go mod 会找到当前模块依赖的所有库,相同的库会使用依赖里面最新版本,你可以看看我在 reddit 上的回复。

    https://www.reddit.com/r/golang/comments/17cyxv9/a_tool_to_find_out_which_module_of_gomod_all/?utm_source=share&utm_medium=web2x&context=3
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2862 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 18ms · UTC 12:28 · PVG 20:28 · LAX 04:28 · JFK 07:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.