давайте предположим, что у меня есть пакет mypackage
, который предоставляет один метод, например Build()
, которая возвращает конкретную-структуру открытой библиотекой третьей стороны, давайте называется thirdpartypackage
Golang поставщика пакет с vendored суб-пакетов
Так, например, :
package mypackage
import tpp "github.com/thirdpartycompany/thirdpartypackage"
func Build() *tpp.SharedStruct{
//...implementation
}
пакет, который выставляет SharedStruct
является vendored внутри mypackage
, потому что я хочу, чтобы распространять его и сделать этот пакет независимым.
Теперь, после импорта mypackage
в другом проекте и использование thirdpartypackage
в моих тестах (мне это нужно сделать некоторые интеграционные тесты), я вижу следующее сообщение об ошибке:
не может использовать 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 "
В основном компилятор отличает сторонний пакет, поставляемый сторонними поставщиками, и пакет, который я положил в мой м ain project.
Есть ли способы решить эту проблему (которые не удаляют зависимые от поставщика зависимости из моей библиотеки, как предлагается here)? Или я чего-то не хватает?
Спасибо!
Vendoring работает хорошо для команд и менее подходит для отдельных пакетов ... – Volker
Можете ли вы указать свою точную структуру каталогов, ваша точка зрения не ясна –
Вот почему большинство поставщиков инструментов сглаживают каталог поставщиков. Govendor делает это по умолчанию, я не уверен в других инструментах поставщика. Парадигма, которую я начал использовать для наших библиотек, предназначенных для импорта (в отличие от самих приложений), заключается в том, чтобы добавить '/ vendor/* /' в наш '.gitignore'. Это игнорирует подпапки в файлах '/ vendor /', но НЕ (например, 'vendor.json', для govendor). Затем Govendor изящно обрабатывает выравнивание дерева зависимостей, и ваша ошибка исчезает, потому что оба пакета теперь используют один и тот же полностью определенный путь импорта для пакета структуры. – Kaedys