gpt4 book ai didi

mongodb - 如何在 Go 中模拟 MongoDB 时添加克隆和复制功能?

转载 作者:IT王子 更新时间:2023-10-29 00:47:01 25 4
gpt4 key购买 nike

我读了这个article它有很好的在 Go 中模拟 MongoDB 的指南。但是Clone()Copy() 方法存在一些问题。我创建了这个接口(interface)和结构:

type ISession interface {
DB(name string) IDatabase
Close()
Clone() ISession
Copy() ISession
}

type IDatabase interface {
C(name string) ICollection
}

type MongoSession struct {
dbSession *mgo.Session
}

func (s MongoSession) DB(name string) IDatabase {
return &MongoDatabase{Database: s.dbSession.DB(name)}
}

func (s MongoSession) Clone() ISession {
//return session.clone
return s.dbSession.Clone()
}

func (s MongoSession) Copy() ISession {
return s.dbSession.Copy()
}

但是我得到了这个错误

cannot use s.dbSession.Clone() (type *mgo.Session) as type ISession in return argument: *mgo.Session does not implement ISession (wrong type for Clone method) have Clone() *mgo.Session want Clone() ISession

cannot use s.dbSession.Copy() (type *mgo.Session) as type ISession in return argument: *mgo.Session does not implement ISession (wrong type for Clone method) have Clone() *mgo.Session want Clone() ISession

如何向接口(interface)添加 Clone()Copy() 方法?

最佳答案

MongoSession.Copy()MongoSession.Clone() 必须返回一个实现 ISession 的值。基本上,您正是为此创建了 MongoSession 类型:以实现 ISession

mgo.Session没有实现您的 ISession 接口(interface)(例如,因为它的 Session.Clone() 方法的返回类型是 *mgo.Session 而不是 ISession)。您应该创建并返回 MongoSession 的新值,您可以在其中包装复制或克隆的 *mgo.Session 值。

像这样:

func (s MongoSession) Clone() ISession {
return MongoSession{dbSession: s.dbSession.Clone()}
}

func (s MongoSession) Copy() ISession {
return MongoSession{dbSession: s.dbSession.Copy()}
}

关于mongodb - 如何在 Go 中模拟 MongoDB 时添加克隆和复制功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50072677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com