我读了这篇文章,它有很好的指南,可以在 Go 中模拟 MongoDB。但是在方法Clone()和Copy()方法上也存在一些问题。我创建了这个接口和结构:
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()
}
Run Code Online (Sandbox Code Playgroud)
但我收到了这个错误
不能使用 s.dbSession.Clone()(类型 *mgo.Session)作为返回参数中的 ISession 类型:*mgo.Session 没有实现 ISession(Clone 方法的类型错误)有 Clone() *mgo.Session 想要 Clone()会话
不能使用 s.dbSession.Copy()(类型 *mgo.Session)作为返回参数中的 ISession 类型:*mgo.Session 没有实现 ISession(Clone 方法的类型错误)有 Clone() *mgo.Session 想要 Clone()会话
我如何添加Clone()和Copy()方法到接口?
MongoSession.Copy()并且MongoSession.Clone()必须返回一个实现ISession. MongoSession基本上,您正是为此创建类型:实现ISession.
mgo.Session不实现您的ISession接口(例如,因为其Session.Clone()方法的返回类型为*mgo.Sessionand not 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()}
}
Run Code Online (Sandbox Code Playgroud)