嗯,我在界面周围遇到了问题。
所以我使用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
我对这个概念缺少什么?
答案 0 :(得分:1)
在golang-nuts上得到了这个答案的回复。
我遇到的问题是方法必须具有完全相同的签名: http://golang.org/doc/faq#t_and_equal_interface
感谢Jesse McNelis参加golang-nuts团体活动!