Go mod兼容性问题

模块在 Go 中确定了一个重要的原则,即 导入兼容性规则

如果旧包和新包的导入路径相同,新包必须向后兼容旧的包

所以一旦你依赖了某个包的两个版本,那么较低版本的将会被忽略。

举个例子:

  • 项目 A 和 B 都 依赖 项目 C
  • 但项目 A 依赖的是项目 C 的 V2 版本,项目 B 依赖的是项目 C 的 V1 版本
  • 一旦项目 A 去引用项目 B,那么项目 B 的 V1 版本将会被忽略

所以针对这个情况,依赖的项目C如果做升级,一定要做兼容性升级,也就是你升级V2的时候不能把项目 C 的 V1 版本里面的东西删掉

如果说真的想删或者大改动怎么办?有两种解决方案

改动小的推荐用方案1,改动比较大的话推荐用方案2

  1. 修改B项目,将其引用改为V2版本,并修改代码
  2. 可以修改项目 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版本。使两个版本可以共存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值