Takto neukládáte a používáte připojení MongoDB v Go.
Musíte uložit mgo.Session
, nikoli mgo.Database
instance. A kdykoli potřebujete komunikovat s MongoDB, získáte kopii nebo klon relace (např. pomocí Session.Copy()
nebo Session.Clone()
) a zavřete jej, když jej nepotřebujete (nejlépe pomocí defer
prohlášení). Tím zajistíte, že nedojde k úniku spojů.
Vy také nábožensky vynechejte kontrolu chyb, prosím nedělejte to. Cokoli vrátí error
, zkontrolujte to a postupujte podle toho správně (nejméně, co můžete udělat, je vytisknout/zaprotokolovat).
Takže v podstatě to, co musíte udělat, je něco takového:
var session *mgo.Session
func 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
}
Viz související otázky:
mgo – výkon dotazu se zdá být trvale pomalý (500–650 ms)
Souběžnost v gopkg.in/mgo.v2 (Mongo, Go)