我在Golang中使用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 < /strong>/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
完全相同,但golang希望此代码来自同一个文件夹?
我做错了什么?
答案 0 :(得分:2)
Go中的包由完整导入路径标识,而不是按名称标识。
例如,在标准库中,有两个不同的包具有相同的名称template
,但导入路径不同:text/template
和html/template
。
您应该确保使用相同的路径导入go-nsq
包。