Dit is niet hoe je een MongoDB-verbinding in Go opslaat en gebruikt.
U moet een mgo.Session
. opslaan , niet een mgo.Database
voorbeeld. En wanneer u met de MongoDB moet communiceren, verkrijgt u een kopie of een kloon van de sessie (bijvoorbeeld met Session.Copy()
of Session.Clone()
), en je sluit het wanneer je het niet nodig hebt (bij voorkeur met een defer
uitspraak). Dit zorgt ervoor dat je geen verbindingen lekt.
U ook religieus laat het controleren op fouten achterwege, doe dat alstublieft niet. Wat er ook een error
retourneert , controleer het en handel er correct naar (het minste wat u kunt doen is het afdrukken / loggen).
Dus eigenlijk moet je zoiets als dit doen:
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
}
Zie gerelateerde vragen:
mgo - queryprestaties lijken constant traag (500-650 ms)
Gelijktijdigheid in gopkg.in/mgo.v2 (Mongo, Go)