我在处理接口时遇到了问题。
所以我使用 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)
我收到编译器错误:
controller/handlers.go:35: 不能在函数参数中使用 ctx.Database (type *mgo.Database) 作为 dota.database 类型:*mgo.Database 没有实现 dota.database(C 方法的类型错误)有 C(string ) *mgo.Collection 想要 C(string) dota.collection
我对这个概念遗漏了什么?
相关分类