猿问

Golang 接口来简化依赖关系?

我在处理接口时遇到了问题。


所以我使用 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


我对这个概念遗漏了什么?


慕的地8271018
浏览 192回答 1
1回答
随时随地看视频慕课网APP

相关分类

Go
我要回答