Использование внешней зависимости в библиотеке

Я использую 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 пакет импортируется по тому же пути.

Другие вопросы по тегам