我阅读了此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()
}
但是我得到这个错误
如何为接口(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()}
}