我如何知道 mgo 会话是否已关闭

xjp*_*jtu 6 go mongodb mgo

我正在使用Go*mgo.Session的 MongoDB 驱动程序labix_mgo,但是我不知道会话是否已关闭。当我使用关闭的会话时,将引发运行时错误。如果我知道会话已关闭,我想跳过会话副本。

icz*_*cza 2

首先,mgo您正在使用的驱动程序:(gopkg.in/mgo.v2托管于https://github.com/go-mgo/mgo)不再维护。相反,请使用社区支持的 fork github.com/globalsign/mgo,它具有向后兼容的 API。

mgo.Session没有提供检测它是否已关闭的方法(使用其Session.Close()方法)。

但您不应该依赖其他人关闭您正在使用的会话。获取会话的相同代码应该负责关闭它。遵循这个简单的原则,您就不会遇到使用封闭会话的问题。

例如,如果我们以 Web 服务器为例,在请求开头使用Session.Copy()(或) 获取会话,并在同一个处理程序、同一个函数中关闭会话(最好使用 defer) 。并将此会话传递给任何需要它的人。他们不必关闭它,他们不能这样做,这是创建它的函数的责任。Session.Clone()