Я использую wgo для управления зависимостями в Golang (хотя я думаю, что ВГО имеет мало общего с этим), ВГО имеет структуру папок, как этотИспользование внешнего Завис в библиотеке
project/
.gocfg/
gopaths
vendor.json
vendor/
src/
github.com_or_whatever/
У меня есть библиотека Я закодирован себя, который использует nsq-go
типа в одном из экспортированных методов:
func AddNsqSubscription(
topic, channel string,
handler nsq.Handler,
config *nsq.Config) error { }
библиотека называется messi
и я импортировать nsq-go
как так "messi/vendor/src/github.com/bitly/go-nsq"
Проблема возникает, когда я пытаюсь использовать эту библиотеку в другом проекте. Например, в проекте под названием scribe
У меня есть следующий код (обратите внимание на импорт):
import (
"scribe/vendor/src/github.com/bitly/go-nsq"
"scribe/vendor/src/messi"
)
//...
nsqHandler := nsq.HandlerFunc(func(message *nsq.Message) error {
msgHandler(MessiMessage{message})
return nil
})
return messi.AddNsqSubscription(destination, subdestination, nsqHandler, nsq.NewConfig())
Когда я go build
возвращается следующее сообщение об ошибке:
не может использовать nsqHandler (тип "scribe /vendor/src/github.com/bitly/go-nsq".HandlerFunc) как тип «messi /vendor/src/github.com/bitly/go-nsq".Handler в аргументе для messi.AddNsqSubscription: "писар/поставщик/src/github.c ом/Bitly/идти-NSQ ".HandlerFunc не реализует "Messi/поставщик/SRC/github.com/Bitly/гоу-NSQ" .Handler (неправильный тип для метода HandleMessage)
имеют HandleMessage (" писец /vendor/src/github.com/bitly/go-nsq".Message) ошибка
хотят HandleMessage ( "Messi /vendor/src/github.com/bitly/go-nsq". Сообщение)
Почему ? Я не знаю, что происходит. Код go-nsq
импортирован точно так же, но golang хочет, чтобы этот код происходил из одной и той же папки?
Что я делаю неправильно?
AFAIK Лучшая практика считается не продажей deps в библиотеках, а только в приложениях, чтобы избежать этих ситуаций. Это то, что я лично делаю. –
@Not_a_Golfer Как мне управлять зависимостью go-nsq в библиотеке? – eversor
просто импортируйте пути as-is (github.com/foo/bar), и пусть разработчик приложения-поставщика все депонирует так, как они хотят - например, с переписыванием пути или без него. –