Golang接口简化了依赖关系?

时间:2013-10-27 04:18:26

标签: interface go mgo go-interface

嗯,我在界面周围遇到了问题。

所以我使用Go包来处理我的mongodb东西,但我不想将该包导入到每个模型中,什么不是。我想将尽可能多的子包(如模型)保留到标准库中。所以我想我会布置一些这样的接口:

type m map[string]interface{}

type collectionSlice interface {
    One(interface{}) error
}

type collection interface {
    Upsert(interface{}, interface{}) (interface{}, error)
    Find(interface{}) collectionSlice
}

type database interface {
    C(string) collection
}

问题是,当我去使用像:

这样的功能时
func FindItem(defindex int, d database) (*Item, error) {

通过传入我的mgo.Database:

在使用接口的包中找到
item, err := dota.FindItem(int(defindex), ctx.Database)

我收到编译错误:

controllers / handlers.go:35:不能在函数参数中使用ctx.Database(类型* mgo.Database)作为类型dota.database:         * mgo.Database没有实现dota.database(C方法的类型错误)                 有C(字符串)* mgo.Collection                 想要C(字符串)dota.collection

我对这个概念缺少什么?

1 个答案:

答案 0 :(得分:1)

在golang-nuts上得到了这个答案的回复。

我遇到的问题是方法必须具有完全相同的签名: http://golang.org/doc/faq#t_and_equal_interface

感谢Jesse McNelis参加golang-nuts团体活动!