मेरा सुझाव है कि इस तरह के वैश्विक सत्र का उपयोग न करें। इसके बजाय, आप एक प्रकार बना सकते हैं जो सभी डेटाबेस इंटरैक्शन के लिए ज़िम्मेदार है। उदाहरण के लिए:
type DataStore struct {
session *mgo.Session
}
func (ds *DataStore) ucol() *mgo.Collection { ... }
func (ds *DataStore) UserExist(user string) bool { ... }
उस डिजाइन के कई फायदे हैं। एक महत्वपूर्ण बात यह है कि यह आपको एक ही समय में उड़ान में कई सत्र करने की अनुमति देता है, इसलिए यदि आपके पास एक http हैंडलर है, उदाहरण के लिए, आप एक स्थानीय सत्र बना सकते हैं जो केवल एक अनुरोध के लिए एक स्वतंत्र सत्र द्वारा समर्थित है:पी>
func (s *WebSite) dataStore() *DataStore {
return &DataStore{s.session.Copy()}
}
func (s *WebSite) HandleRequest(...) {
ds := s.dataStore()
defer ds.Close()
...
}
उस मामले में एमजीओ चालक अच्छा व्यवहार करता है, क्योंकि सत्र आंतरिक रूप से कैश किए जाते हैं और पुन:उपयोग/बनाए जाते हैं। प्रत्येक सत्र का उपयोग करते समय एक स्वतंत्र सॉकेट द्वारा समर्थित किया जाएगा, और इसमें स्वतंत्र सेटिंग्स कॉन्फ़िगर हो सकती हैं, और इसमें स्वतंत्र त्रुटि प्रबंधन भी होगा। यदि आप एकल वैश्विक सत्र का उपयोग कर रहे हैं तो ये ऐसे मुद्दे हैं जिनसे आपको अंततः निपटना होगा।