场景:我有一个数据库类型实现了一些 CRUD 操作。
我想:
抽象出数据库层以支持多个数据库
将缓存层“放在它前面”作为通读缓存
所以我的想法是:
为 postgres 特定代码和缓存创建数据库接口
将 postgres 类型传递给缓存构造函数,以便它可以从数据库中使用它
请参阅下面的内容,了解我在分配时导致 cacheNew() 错误:
不能使用 dbdriver(接口 {} 类型的变量)作为结构文字中的数据库值:缺少方法 GetUser
解决这个问题的最佳方法是什么?
package main
import "fmt"
type database interface {
GetUser(string)
}
type postgres struct {
hostname string
}
func (p *postgres) GetUser(u string) {
fmt.Printf("Postgres: GetUser %s\n", u)
}
type cache struct {
db database
}
func cacheNew(dbdriver interface{}) cache {
return cache{
db: dbdriver,
}
}
func (c *cache) GetUser(u string) {
fmt.Printf("Cache: GetUser %s\n", u)
c.db.GetUser(u)
}
func main() {
// var db database
db := postgres{
hostname: "x",
}
db.GetUser("joe")
dbViaCache := cacheNew(db)
dbViaCache.GetUser("joe")
}
繁华开满天机
梦里花落0921
繁花如伊
相关分类