鍍金池/ 問答/GO  網(wǎng)絡(luò)安全/ go的mongodb庫(kù)mgo如何使用連接池?

go的mongodb庫(kù)mgo如何使用連接池?

我看到別人一般都是直接dial的,不知道里面具體發(fā)生了什么。

`
package models

import (

"gopkg.in/mgo.v2"

)

var (

DB         string
PublicSalt string

)

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

session, err := mgo.Dial(DB) // 這里是不是會(huì)每次都是一個(gè)新連接?還是連接池里面拿了一條出來(lái)。
if err != nil {
    panic(err)
}

session.SetMode(mgo.Monotonic, true)

return session, session.DB("gopher")

}

package b

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

`

回答
編輯回答
鹿惑

可以看下這個(gè)源碼 http://bazaar.launchpad.net/+...:/session.go#L195

Dial 方法調(diào)用 DialWithTimeout 方法,然后又調(diào)用 DialWithInfo 方法,所以是有連接池的。 只是Dita方法為你做了方便方便的wrapper。

然后用 session.New() 或者 session.Copy() 獲取一個(gè)Diat返回的鏈接

2017年11月15日 06:15
編輯回答
詆毀你
func test(){
    s := session.Copy()
    defer s.Close()
    //使用s
    ........
}
2018年7月3日 16:20