Golang供应商包与销售子包

时间:2016-12-12 10:43:49

标签: go govendor

情况:

我们假设我有一个名为mypackage的软件包。它公开了一个名为Build()的方法,该方法返回由名为thirdpartypackage的第三方库公开的具体结构,例如package mypackage import tpp "github.com/thirdpartycompany/thirdpartypackage" func Build() *tpp.SharedStruct{ //...implementation } 。如下所示:

SharedStruct

公开mypackage的软件包在mypackage内销售,因为我想分发它并使该软件包独立。

问题:

thirdpartypackage导入另一个项目并在我的(集成)测试中使用externalproject_add(zlib PREFIX . # download step GIT_REPOSITORY git@github.com:madler/zlib.git GIT_TAG v1.2.8 # configure step SOURCE_DIR zlib CONFIGURE_COMMAND ${CMAKE_SOURCE_DIR}/build/zlib/zlib/configure --archs="-arch ${ARCH}" --static # build step BUILD_COMMAND make BUILD_IN_SOURCE 1 # install step INSTALL_DIR zlib-${ARCH} INSTALL_COMMAND make install # logging LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 ) 后,我收到以下错误:

  

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

基本上,编译器区分我库中的第三方软件包和我放在主项目中的销售软件包。

问题:

有没有办法解决这个问题,那就是不会从我的库中删除已售出的依赖项,比如建议的here?我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

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

  

名为“vendor”的目录下的代码只能由以“vendor”的父目录为根的目录树中的代码导入,并且只能使用省略前缀并包括vendor元素的导入路径。 (go command

我从您的问题中了解到,您的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)

我希望我明白自己的观点。