Go mod 兼容性问题
模块在 Go 中确定了一个重要的原则,即 导入兼容性规则
如果旧包和新包的导入路径相同,新包必须向后兼容旧的包
所以一旦你依赖了某个包的两个版本,那么较低版本的将会被忽略。
举个例子:
- 项目 A 和 B 都 依赖 项目 C
- 但项目 A 依赖的是项目 C 的 V2 版本,项目 B 依赖的是项目 C 的 V1 版本
- 一旦项目 A 去引用项目 B,那么项目 B 的 V1 版本将会被忽略
所以针对这个情况,依赖的项目C如果做升级,一定要做兼容性升级,也就是你升级V2的时候不能把项目 C 的 V1 版本里面的东西删掉
如果说真的想删或者大改动怎么办?有两种解决方案
改动小的推荐用方案1,改动比较大的话推荐用方案2
- 修改B项目,将其引用改为V2版本,并修改代码
- 可以修改项目 C 的 go.mod 文件加一个
v2
的后缀。
比如
module github.com/pibigstar/go-demo
go 1.14
你将其调整为
module github.com/pibigstar/go-demo/v2
go 1.14
这样在 项目A中就可以引用v2版本,项目B中还可以继续引用v1版本。使两个版本可以共存。
本作品采用《CC 协议》,转载必须注明作者和本文链接
如果A往V2设置的全局数据,但是B从V1读不到怎么办? :joy:
你版本一致也读不到吧。。。。