使用mgo操作mongo时遇到了上述的异常,原因是session的使用失败。
func foo(){
session ,_ := mgo.Dial("mongodb://127.0.0.1")
defer s.Close()
session.DB("test").C("coll").Insert(bson.M{"name":"zhangsan"})
}
上述的函数,调用一次是能够插入成功的,但是循环1000次调用该函数就会抛出异常
mongo connect error no reachable servers
原因是每次插入都要取获取一个session,实际上mgo的session不能够这样使用,应该使用session的一个拷贝,退出时关闭临时的session
func GetSession() *mgo.Session {
if session == nil {
session, err := mgo.Dial(URL)
if err != nil {
log.Println("mongo connect error", err)
panic(err)
}
session.SetMode(mgo.SecondaryPreferred, true)
}
return session.Copy()
}
当然也可以为session设置一个连接池