Golang vendor package с проданными подпакетами
Ситуация:
Давайте предположим, что у меня есть пакет под названием 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"
По сути, компилятор различает сторонний пакет внутри моей библиотеки и пакет, который я поместил в свой основной проект.
Вопрос:
Существуют ли способы решения этой проблемы, которые не удаляют вендорные зависимости из моей библиотеки, как предложено здесь? Я что-то пропустил?
1 ответ
Я думаю, что вам не хватает этого пункта:
Код под каталогом с именем vendor импортируется только кодом в дереве каталогов, корнем которого является родительский элемент vendor, и только с использованием пути импорта, в котором префикс не указан, вплоть до элемента vendor. ( идти команда)
Что я понимаю из твоей проблемы - это твоя mypackage
имеет в качестве дочернего элемента vendor, поэтому, когда он импортируется любым другим пакетом на том же уровне, по понятной причине они не могут видеть этот список vendor.
Вы можете понять, что это похоже на 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)
Я надеюсь, что я согласен с моей точкой зрения.