go的mongodb库mgo如何使用连接池?

我看到别人一般都是直接dial的,不知道里面具体发生了什么。

`
package models

import (

"gopkg.in/mgo.v2"

)

var (

DB         string
PublicSalt string

)

func GetSessionAndDB() (mgo.Session, mgo.Database) {

session, err := mgo.Dial(DB) // 这里是不是会每次都是一个新连接?还是连接池里面拿了一条出来。
if err != nil {
    panic(err)
}

session.SetMode(mgo.Monotonic, true)

return session, session.DB("gopher")

}

package b

sess , db := models.GetSessionAndDb() //

`

阅读 8.6k
2 个回答

可以看下这个源码 http://bazaar.launchpad.net/+...:/session.go#L195

Dial 方法调用 DialWithTimeout 方法,然后又调用 DialWithInfo 方法,所以是有连接池的。 只是Dita方法为你做了方便方便的wrapper。

然后用 session.New() 或者 session.Copy() 获取一个Diat返回的链接

func test(){
    s := session.Copy()
    defer s.Close()
    //使用s
    ........
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题