sql.Open() में गो/Golang sql.DB पुन: उपयोग के प्रकार * के एक चर sql.DB रिटर्नकार्यों
मैं एक समारोह है कि 10 अन्य कार्यों है कि सभी डेटाबेस कॉल
बनाने की जरूरत है कॉल इसे और अधिक सही/कुशल करने के लिए है:
- हर कार्य के लिए * sql.DB सूचक भेजें, या
- प्रत्येक कार्य में एक नया * sql.DB वस्तु बनाएं
func DoLotsOfThings() {
db, _ := sql.Open()
defer db.Close()
DoTask1(db)
DoTask2(db)
}
या
func DoLotsOfThings() {
DoTask1()
DoTask2()
}
func DoTask1() {
db, _ := sql.Open()
defer db.Close()
}
func DoTask1() {
db, _ := sql.Open()
defer db.Close()
}
कारण अर्थ कारण है कि मैं पूछ रहा हूँ, क्योंकि मैं वर्तमान में प्रत्येक कार्य करने के लिए सूचक भेज रहा हूँ और मेरे ड्राइवर को तोड़ने के लिए लगता है। मैं http://code.google.com/p/odbc का उपयोग कर रहा हूं, जो मुझे विश्वास दिलाता है कि प्रत्येक समारोह में अपना होना चाहिए, और मैं ड्राइवर के आंतरिक पर भरोसा कर सकता हूं।
संपादित
आरई ड्राइवर टूटना, यह केवल उच्च यातायात वातावरण के तहत होता है। और यह केवल दस मिनट या उससे अधिक समय के बाद होता है। जो मुझे विश्वास दिलाता है कि कुछ प्रकार की मेमोरी लीक है जो चालक को काम करना बंद कर देती है। हालांकि मैं * sql.DB के प्रत्येक उदाहरण के लिए db.Close() को रोकता हूं, इसलिए मुझे नहीं पता कि मैं इस समस्या को हल करने के लिए और क्या कर सकता हूं।
andybalholm कहते कनेक्शन पूलिंग, आंतरिक रूप से नियंत्रित किया जाता है, जो सही प्रतीत हो रहा है क्योंकि यह केवल टूट जाता है के बाद मैं कुछ निष्पादित करने के लिए प्रयास करते हैं, जब नहीं मैं आह्वान sql.Open()
मैं अपने जाओ एप्लिकेशन चल छोड़ देते हैं , यह किसी भी प्रकार के एसक्यूएल प्रश्नों को निष्पादित करने में सक्षम नहीं होगा, लेकिन अगर मैं अलग-अलग गो परीक्षणों को एमएसएसएलएल से कनेक्ट करने और चल रहे प्रश्नों को चलाने का प्रयास करता हूं, तो यह काम करता है।
यदि आप यहां पुन: उत्पादित उदाहरण पोस्ट कर सकते हैं तो https://code.google.com/p/odbc/issues/list, मैं इसे ठीक करने का प्रयास करूंगा। – alex