Во-первых, драйвер mgo
, который вы используете: gopkg.in/mgo.v2
(размещен на https://github.com/go-mgo/mgo), больше не поддерживается. Вместо этого используйте поддерживаемый сообществом форк github.com/globalsign/mgo
, он имеетобратно совместимый API.
mgo.Session
не обеспечивает способ обнаружения, если он был закрыт (используя метод Session.Close()
).
Но вы не должны зависеть от других, закрывающих сеанс, который вы используете. Тот же код, который получает сеанс, должен отвечать за его закрытие. Следуйте этому простому принципу, и вы не столкнетесь с проблемамииспользования закрытого сеанса.
Например, если мы возьмем в качестве примера веб-сервер, получите сеанс, используя Session.Copy()
(или Session.Clone()
)в начале запроса и закройте сеанс (желательно с отложенным) в том же обработчике, в той же функции . И просто передайте этот сеанс тому, кто в нем нуждается. Им не нужно закрыватьэто, они не должны, это ответственность функции, которая его создала.