我有这个问题:
Golang 选择了 X v0.2.0 并称它很好。但这并不好。v0.1 和 v0.2 的不同足以导致 A 中断并且我的项目无法编译。
我必须采取什么措施来解决这个问题?
Go 的官方立场似乎是“X 的开发者做错了,应该在重大更改后发布一个主要版本”。但这对目前的情况没有帮助。
我找不到实际解决方案的讨论。
更多信息
我尝试过的事情:
go.mod. 它可以工作,但会使这些模块的更新缓慢且容易出错。go mod vendor,但找不到解决方案。例如,您可以创建两个模块的本地副本,并使用替换指令和伪主要版本来使用不同标签导入同一存储库的多个版本:
replace moduleX/v1010 => ./src/moduleX/0.1.0
replace moduleX/v1020 => ./src/moduleX/0.2.0
Run Code Online (Sandbox Code Playgroud)
然后在您的项目中将根据需要使用任一版本:
import (
moduleX_010 "moduleX/v1010"
moduleX_020 "moduleX/v1020"
)
Run Code Online (Sandbox Code Playgroud)
这里理想的解决方案是向 module 提交上游 PRA以使其兼容X v0.2.0,然后更新自己的 module 以使用 module 的固定版本A。
A如果您在等待上游维护者响应 PR 时需要临时插入模块修复程序,则可以使用replace指令来完成此操作。(有关更多详细信息,请参阅https://golang.org/doc/modules/managing-dependency#tmp_11。)