遇到了 grpc 不遵循语义版本, 导致不同版本包之间的冲突.
更新了目标的版本模块之后, 编译一下就发现原先项目引用的 gozero 框架报错了. 搜索一下
相关的关键词,就可以定位到问题是 grpc 搞的鬼.
再找到对应的兼容版本, 升级到对应的版本就可以了.
go 依赖版本选择#
[golang 的最小版本选择]https://ynikl.github.io/blog/golang-minimal-version-selection/
大体意思:
会选择当前编译需要依赖包的最高版本(使用语义化版本)
寻找依赖的原因#
go mod why
寻找自己项目引用某个包的 最短引用路径, 导致会引用目标包的
1
| go mod why google.golang.org/grpc
|
输出目标包的引用依赖层级
1
2
3
4
5
6
| ❯ go mod why google.golang.org/grpc
# google.golang.org/grpc
hello/world/test
git.test.cn/company-open/rpc-pkgs
google.golang.org/grpc
|
go mod graph
可以打印出, 模块的依赖图
1
2
3
4
5
6
| example.com/main example.com/a@v1.1.0
example.com/main example.com/b@v1.2.0
example.com/a@v1.1.0 example.com/b@v1.1.1
example.com/a@v1.1.0 example.com/c@v1.3.0
example.com/b@v1.1.0 example.com/c@v1.1.0
example.com/b@v1.2.0 example.com/c@v1.2.0
|