Использование внешней зависимости в библиотеке
Я использую wgo для управления зависимостями в Golang (хотя я думаю, что wgo имеет мало общего с этим), wgo имеет такую структуру папок, как эта
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: "scribe/vendor/src/github.com/bitly/go-nsq".HandlerFunc не реализует "messi/vendor/src/github.com/bitly/go-nsq".Handler (неправильный тип для метода HandleMessage)
есть ошибка HandleMessage("scribe /vendor/src/github.com/bitly/go-nsq".Message) ошибка
хотите HandleMessage(ошибка"messi/vendor/src/github.com/bitly/go-nsq".Message)"
Зачем? Я действительно не знаю, что происходит. Код go-nsq
импорт точно такой же, но Голанг хочет, чтобы этот код пришел из той же папки?
Что я делаю неправильно?
1 ответ
Пакеты в Go идентифицируются по полному пути импорта, а не по имени.
Например, в стандартной библиотеке есть два разных пакета с одинаковым именем template
но разные пути импорта: text/template
а также html/template
,
Вы должны убедиться, что go-nsq
пакет импортируется по тому же пути.