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版本。使两个版本可以共存。

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 2

如果A往V2设置的全局数据,但是B从V1读不到怎么办? :joy:

3年前 评论

你版本一致也读不到吧。。。。

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!