在库中使用外部依赖关系

时间:2015-08-12 15:09:19

标签: go

我在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希望此代码来自同一个文件夹?

我做错了什么?

1 个答案:

答案 0 :(得分:2)

Go中的包由完整导入路径标识,而不是按名称标识。

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

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