我怎么知道mgo会话是否关闭

时间:2018-10-17 07:38:20

标签: mongodb go mgo

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

1 个答案:

答案 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)。相同的处理程序,使用相同的功能。只需将此会话传递给任何需要它的人即可。他们不必关闭它,也不必关闭它,这是创建它的功能的责任。