इस तरह से आप गो में मोंगोडीबी कनेक्शन को स्टोर और उपयोग नहीं करते हैं।
आपको एक mgo.Session
स्टोर करना होगा , नहीं एक mgo.Database
उदाहरण। और जब भी आपको MongoDB के साथ बातचीत करने की आवश्यकता होती है, तो आप सत्र की एक प्रति या क्लोन प्राप्त करते हैं (जैसे Session.Copy()
के साथ) या Session.Clone()
), और जब आपको इसकी आवश्यकता न हो तो आप इसे बंद कर देते हैं (defer
. का उपयोग करके बेहतर बयान)। यह सुनिश्चित करेगा कि आप कनेक्शन लीक न करें।
आप भी धार्मिक रूप से त्रुटियों की जाँच करना छोड़ दें, कृपया ऐसा न करें। जो कुछ भी error
देता है , इसे जांचें और इस पर ठीक से कार्रवाई करें (कम से कम आप इसे प्रिंट / लॉग कर सकते हैं)।
तो मूल रूप से आपको जो करने की ज़रूरत है वह कुछ इस तरह है:
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
}
संबंधित प्रश्न देखें:
एमजीओ - क्वेरी का प्रदर्शन लगातार धीमा लगता है (500-650ms)
gopkg.in/mgo.v2 (मोंगो, गो) में संगामिति