依赖三角形

时间:2017-07-28 19:52:03

标签: go types dependencies glide-golang

Dependencies是Go的一个问题,但这是新的东西:

  • 应用A直接依赖于库BC
  • 图书馆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的反模式。无论如何......如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

我会移除vendor下方的B文件夹,并将C放入根vendor文件夹(对于应用A,如果我收到您的结构正确)。

这样,每种类型最终只能有一个地方。

不确定为什么B首先会有vendor个文件夹,因为Glide的建议很清楚:

http://glide.readthedocs.io/en/latest/vendor/

  

库(没有主程序包的代码库)不应存储供应商/文件夹中的外部包

  

在应用程序(带有主程序包的代码库)中,顶级应该只有一个供应商/目录