在库中使用外部依赖关系

eversor:

我正在wgo使用wgo进行依赖关系管理(尽管我认为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”。 .AddNsqSubscription:“ scribe / vendor / src / github.com / bitly / go-nsq”。HandlerFunc不实现“ messi / vendor / src / github.com / bitly / go-nsq”。Handler(HandleMessage方法的类型错误)

出现 HandleMessage(抄写 /vendor/src/github.com/bitly/go-nsq".Message)错误
想要 HandleMessage(
messi /vendor/src/github.com/bitly/go-nsq".Message)错误

为什么?我真的不知道发生了什么。go-nsq导入的代码完全相同,但是golang希望此代码来自同一文件夹吗?

我究竟做错了什么?

科斯蒂亚:

Go中的软件包是通过完整的导入路径而不是名称来标识的。

例如,在标准库中,有两个名称相同template但导入路径不同的软件包text/templatehtml/template

您应该确保go-nsq使用相同的路径导入包。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章