我将MongoDB驱动程序*mgo.Session
的{{1}}用于Go,但是我不知道会话是否关闭。当我使用关闭的会话时,将引发运行时错误。如果我知道会话已关闭,我想跳过会话副本。
答案 0 :(得分:1)
首先,将不再维护您使用的mgo
驱动程序:gopkg.in/mgo.v2
(托管在https://github.com/go-mgo/mgo上)。而是使用社区支持的fork github.com/globalsign/mgo
,它具有向后兼容的API。
mgo.Session
无法提供检测其是否已关闭的方法(使用其Session.Close()
方法)。
但是您不应该依赖其他人来关闭正在使用的会话。 获取会话的相同代码应负责将其关闭。遵循这一简单原则,您不会遇到使用封闭会话的问题。
例如,如果我们以Web服务器为例,则在请求开始时使用Session.Copy()
(或Session.Clone()
)获得会话,然后关闭会话(最好使用defer)。相同的处理程序,使用相同的功能。只需将此会话传递给任何需要它的人即可。他们不必关闭它,也不必关闭它,这是创建它的功能的责任。