我阅读了此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()}
}

08-27 20:57