Ситуация:
Предположим, у меня есть пакет с именем 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/третья компания/третьипартипакет"
По сути, компилятор различает сторонний пакет в моей библиотеке и сторонний пакет, который я поместил в свой основной проект.
Вопрос:
Существуют ли способы решения этой проблемы, которые не удаляют зависимости от поставщиков из моей библиотеки, как предложено здесь? Я что-то упускаю?
/vendor/*/
к нашему.gitignore
. Это игнорирует вложенные папки в/vendor/
, но НЕ файлы (например,vendor.json
, для govendor). Затем Govendor изящно справляется с выравниванием дерева зависимостей, и ваша ошибка исчезает, поскольку теперь оба пакета используют один и тот же полный путь импорта для пакета структуры. - person Kaedys   schedule 12.12.2016