Dependencies是Go的一个问题,但这是新的东西:
A
直接依赖于库B
和C
B
直接依赖于库C
如果我们在应用程序A
的代码中有这样的内容:
funcyInstance := &C.FuncyObject{}
B.CleverFunction(funcyInstance)
在lib B
时:
func CleverFunction(arg *C.FuncyObject) {}
它引发了一个错误:
不能使用funcyInstance(类型" * A / vendor / github.com / C" .FuncyObject)作为类型" * B / vendor / github.com / C" .FuncyObject in B.CleverFunction的参数
我使用Glide作为依赖管理器。
据我所知,这种依赖关系的配置导致存在多种类型而不是一种类型(对于所有库),并且可能它只是Go的反模式。无论如何......如何解决这个问题?
答案 0 :(得分:1)
我会移除vendor
下方的B
文件夹,并将C
放入根vendor
文件夹(对于应用A
,如果我收到您的结构正确)。
这样,每种类型最终只能有一个地方。
不确定为什么B
首先会有vendor
个文件夹,因为Glide的建议很清楚:
http://glide.readthedocs.io/en/latest/vendor/
库(没有主程序包的代码库)不应存储供应商/文件夹中的外部包
和
在应用程序(带有主程序包的代码库)中,顶级应该只有一个供应商/目录