go mod 版本冲突问题

2022-04-18 18:20:43 +08:00
 panda666
项目中使用了第三方库 A ,A 依赖 go.opentelemetry.io/otel v0.x.x ,现在要在项目加入第三方库 B ,B 依赖 go.opentelemetry.io/otel v1.x.x

otel 的这两个版本不兼容,指定 v0.x.x 还是 v1.x.x 都会报错

gopkg.in/open-telemetry/opentelemetry-go.v1 试过了,会报错

还有什么其它解决办法吗?
3429 次点击
所在节点    Go 编程语言
15 条回复
FrankAdler
2022-04-18 18:49:05 +08:00
按版本引入,然后使用别名
import (
v1 xxx.com/v1
v2 xxx.com/v2
)
panda666
2022-04-18 18:59:37 +08:00
@FrankAdler 没 v1 这个 path
FrankAdler
2022-04-18 19:05:18 +08:00
@panda666 #2 go 可以基于 git commit id 或者 tag 来当作版本啊
panda666
2022-04-18 19:10:25 +08:00
@FrankAdler 版本和 path 是两个东西吧
Wuuuu
2022-04-18 19:26:01 +08:00
感觉不好搞,因为 golang 用的是 semantic version number ,0.x.x 只是测试版本,1.x.x 都发布了 B 还不升级……如果是 1.0.0 2.0.0 还能用 /V2 这种方法。现在这样僵住了。
GopherDaily
2022-04-18 20:12:20 +08:00
otel 这个是比较特殊的情况,自己给依赖 v0.x.y 的库提个 PR ,升级到 v1.x.y
timpaik
2022-04-18 20:14:59 +08:00
试试在 go.mod 里用 replace
FrankAdler
2022-04-18 20:17:11 +08:00
@panda666 v0 不更新了 fork 下改下 go.mod 里面的 moudle 吧
FrankAdler
2022-04-18 20:17:57 +08:00
replace 我试了下 貌似没跑通
hzzhzzdogee
2022-04-18 21:21:57 +08:00
1. replace
2. 自己 fork 一份
tairan2006
2022-04-19 08:54:34 +08:00
自己 fork 是最常见的方案,golang 的版本管理还是稀烂
panda666
2022-04-19 09:23:05 +08:00
@hzzhzzdogee replace 试了的,会报错,看来只能 fork 了
snowlyg
2022-04-19 09:48:23 +08:00
难道不是换一个第三方依赖库吗?或者自己重写一个。第三方的库又不是官方的,维护者如果不太用心经常会出现这些问题。
beixiao
2022-04-19 12:16:39 +08:00
三方库正常情况下 0.x.x 和 1.x.x 应该是兼容的,作者这么搞显然不太行,建议 fork 之后版本号都加 1
lysS
2022-04-19 18:08:47 +08:00
我还专门试过,两个第三方库都引用了不同版本的同一个库,是会保存的

我猜测是因为 go mod 把树状拆分为二阶的了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/847721

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX