0

依赖是 Go 的一个问题,但这是新的:

  • 应用程序A直接依赖于库BC
  • B直接依赖库C

如果我们在应用程序的代码中有这样的东西A

funcyInstance := &C.FuncyObject{}
B.CleverFunction(funcyInstance)

在 lib 中时B

func CleverFunction(arg *C.FuncyObject) {}

它引发了一个错误:

不能在 B.CleverFunction 的参数中使用 funcyInstance(类型“*A/vendor/github.com/C”.FuncyObject)作为类型“*B/vendor/github.com/C”.FuncyObject

我使用 Glide 作为依赖管理器。

我知道这种依赖配置会导致存在多种类型而不是单一类型(对于所有库),并且可能只是 Go 的一种反模式。无论如何......如何解决这个问题?

4

1 回答 1

1

我会删除vendor下面的文件夹B,然后放入Cvendor文件夹(A如果我正确获取您的结构,则用于应用程序)。

这样,您最终只会为每种类型选择一个位置。

不知道为什么B首先要有一个vendor文件夹,因为 Glide 的建议很明确:

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

库(没有主包的代码库)不应将外部包存储在 vendor/ 文件夹中

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

于 2017-07-28T19:59:36.493 回答