2

情况:

假设我有一个名为mypackage. 它公开了一个名为 的方法Build(),该方法返回一个由名为 的第三方库公开的具体结构thirdpartypackage,例如如下所示:

package mypackage

import tpp "github.com/thirdpartycompany/thirdpartypackage"

func Build() *tpp.SharedStruct{
   //...implementation
}

公开的包SharedStruct是在内部出售的mypackage,因为我想分发它并使该包独立。

问题:

导入mypackage另一个项目并thirdpartypackage在我的(集成)测试中使用后,我收到以下错误:

不能使用 XXXX(类型“github.com/mycompany/mymainproject/vendor/github.com/mycompany/mypackage/vendor/github.com/thirdcompany/thirdpartypackage-go”.Token)作为类型“github.com/empatica/mycompany/供应商/github.com/thirdcompany/thirdpartypackage”

基本上,编译器会区分我的库中的供应商第三方包和我放在主项目中的供应商包。

问题:

有没有办法解决这个问题,而不是像这里建议的那样从我的库中删除供应商的依赖项?我错过了什么吗?

4

1 回答 1

3

我认为您缺少的是这一点:

名为“vendor”的目录下的代码只能通过以“vendor”的父级为根的目录树中的代码导入,并且只能使用省略前缀直到并包括 vendor 元素的导入路径。(执行命令

我从您的问题中了解到的是您的mypackage供应商是它的孩子,因此当它由同一级别的任何其他包导入时,由于显而易见的原因,他们无法看到该供应商列表。

您可以将其理解为类似于protected功能。

因此,如果您想在任何其他包中使用该版本,那么它vendor应该存在于同一级别。例如

ParentDirectory
 > mypackage
 > otherpackage (this will be importing mypackage)
 > vendor (vendor should be present in here so that all children under ParentDirectory can access this)

我希望我的观点很清楚。

于 2016-12-12T11:55:38.327 回答