Как я могу узнать, закрыта ли сессия MGO? - PullRequest
0 голосов
/ 17 октября 2018

Я использую *mgo.Session драйвера MongoDB labix_mgo для Go, однако я не знаю, закрыта ли сессия.Когда я использую закрытый сеанс, возникает ошибка во время выполнения.Я хочу пропустить копию сеанса, если я знаю, что сеанс закрыт.

1 Ответ

0 голосов
/ 17 октября 2018

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

mgo.Session не обеспечивает способ обнаружения, если он был закрыт (используя метод Session.Close()).

Но вы не должны зависеть от других, закрывающих сеанс, который вы используете. Тот же код, который получает сеанс, должен отвечать за его закрытие. Следуйте этому простому принципу, и вы не столкнетесь с проблемамииспользования закрытого сеанса.

Например, если мы возьмем в качестве примера веб-сервер, получите сеанс, используя Session.Copy() (или Session.Clone())в начале запроса и закройте сеанс (желательно с отложенным) в том же обработчике, в той же функции . И просто передайте этот сеанс тому, кто в нем нуждается. Им не нужно закрыватьэто, они не должны, это ответственность функции, которая его создала.

...