douqiang3768 2016-04-05 16:33
浏览 159
已采纳

如何在Go中正确使用MongoDB会话?

I'm using MongoDB (gopkg.in/mgo.v2 package) as a database in my go app. According to MongoDB best practices I should to open connection when application starting and close it when application is terminating. To verify that connection will be closed I can use defer construction:

session, err := mgo.Dial(mongodbURL)
if err != nil {
    panic(err)
}
defer session.Close()

All will be good if I execute this code in main function. But I want to have this code in separate go file. If I do this session will be closed after method will be executed.What is the best way to open and close session in Golang according MongoDB best practices?

  • 写回答

2条回答 默认 最新

  • dongyao2129 2016-04-05 16:46
    关注

    You can do something like this. Create a package which does the Db initialization

        package common
    
        import "gopkg.in/mgo.v2"
    
        var mgoSession   *mgo.Session
    
        // Creates a new session if mgoSession is nil i.e there is no active mongo session. 
       //If there is an active mongo session it will return a Clone
        func GetMongoSession() *mgo.Session {
            if mgoSession == nil {
                var err error
                mgoSession, err = mgo.Dial(mongo_conn_str)
                if err != nil {
                    log.Fatal("Failed to start the Mongo session")
                }
            }
            return mgoSession.Clone()
        }
    

    Clone reuses the same socket as the original session.

    Now in other packages you can call this method:

    package main
    
    session := common.GetMongoSession()
    defer session.Close()
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测