这不是您在Go中存储和使用MongoDB连接的方式。
您必须存储一个
mgo.Session,而不是
mgo.Database实例。而且,每当需要与MongoDB进行交互时,您都可以获取会话的副本或副本(例如,使用
Session.Copy()或
Session.Clone()),并在不需要时关闭它(最好使用
defer语句)。这将确保您不会泄漏连接。
您也 虔诚地 忽略检查错误,请不要这样做。不管返回什么
error,都要检查并正确处理(至少可以做的是打印/记录它)。
所以基本上您需要做的是这样的:
var session *mgo.Sessionfunc init() { var err error if session, err = mgo.Dial("localhost"); err != nil { log.Fatal(err) }}func someHandler(w http.ResponseWriter, r *http.Request) { sess := session.Copy() defer sess.Close() // Must close! c := sess.DB("mapdb").C("tiles") // Do something with the collection, e.g. var tile bson.M if err := c.FindId("someTileID").One(&result); err != nil { // Tile does not exist, send back error, e.g.: log.Printf("Tile with ID not found: %v, err: %v", "someTileID", err) http.NotFound(w, r) return } // Do something with tile}


