mongodb - 如何在 Go 中模拟 MongoDB 时添加克隆和复制功能?
问题描述
我读了这篇文章,它有很好的在 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()
}
但我得到了这个错误
不能在返回参数中使用 s.dbSession.Clone() (类型 *mgo.Session) 作为 ISession 类型: *mgo.Session 没有实现 ISession (Clone 方法的类型错误) 有 Clone() *mgo.Session 想要 Clone()会话
不能在返回参数中使用 s.dbSession.Copy() (类型 *mgo.Session) 作为类型 ISession:*mgo.Session 没有实现 ISession(克隆方法的类型错误)有 Clone() *mgo.Session 想要 Clone()会话
如何添加接口Clone()
和Copy()
方法?
解决方案
MongoSession.Copy()
并且MongoSession.Clone()
必须返回一个实现ISession
. 基本上,您MongoSession
正是为此创建类型:实现ISession
.
mgo.Session
没有实现你的ISession
接口(例如,因为它的Session.Clone()
方法的返回类型是*mgo.Session
and 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()}
}
推荐阅读
- c++ - std::multimap 上的 emplace_hint 是否保留等效元素的相对顺序?
- python - Python subprocess.call() 异常后保持子进程窗口打开
- r - 关于 purrr::walk 的困惑
- php - 获取Ajax打开模态,进行PHP函数调用并将结果放入模态
- windows - 即使在代码更改后,Flutter 仍会继续运行默认的“计数器应用程序”(Windows 应用程序)
- wordpress - 如何配置使用 WPML 的“每种语言的不同域”的 dockerized wordpress nginx?
- node.js - For Loop 内部的数据在表单提交两次后才会显示
- javascript - 将包裹在对象中的 res 传递给回调失败
- node.js - 如何在中间件中使用数据库实体?
- python - 绘制来自两个数据集的值以进行比较