Đây không phải là cách bạn lưu trữ và sử dụng kết nối MongoDB trong Go.
Bạn phải lưu trữ một mgo.Session
, không phải mgo.Database
ví dụ. Và bất cứ khi nào bạn cần tương tác với MongoDB, bạn sẽ có được một bản sao hoặc một bản sao của phiên (ví dụ:với Session.Copy()
hoặc Session.Clone()
), và bạn đóng nó khi bạn không cần (tốt hơn là sử dụng defer
tuyên bố). Điều này sẽ đảm bảo bạn không bị rò rỉ kết nối.
Bạn cũng theo tôn giáo bỏ qua kiểm tra lỗi, xin vui lòng không làm điều đó. Dù trả về lỗi error
, hãy kiểm tra nó và thực hiện đúng cách (ít nhất bạn có thể làm là in / ghi lại nó).
Vì vậy, về cơ bản những gì bạn cần làm là như sau:
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
}
Xem các câu hỏi liên quan:
mgo - hiệu suất truy vấn dường như luôn chậm (500-650ms)
Đồng tiền trong gopkg.in/mgo.v2 (Mongo, Go)