sql.Open वास्तव में आपके डेटाबेस से कनेक्शन नहीं खोलता है।
एक sql.DB आपके डेटाबेस से कनेक्शन का एक पूल बनाए रखता है। हर बार जब आप अपने डेटाबेस से पूछताछ करते हैं तो आपका प्रोग्राम इस पूल से कनेक्शन प्राप्त करने या अन्यथा एक नया कनेक्शन बनाने का प्रयास करेगा। इन कनेक्शनों को बंद करने के बाद पूल में वापस डाल दिया जाता है।
यह है rows.Close()
करता है।आपका db.QueryRow("...")
जब आप Scan(...)
. को कॉल करते हैं तो आंतरिक रूप से वही काम करता है ।
मूल समस्या यह है कि आप बहुत अधिक क्वेरी बना रहे हैं, जिनमें से प्रत्येक को एक कनेक्शन की आवश्यकता है, लेकिन आप अपने कनेक्शन को पर्याप्त तेज़ी से बंद नहीं कर रहे हैं। इस तरह आपके प्रोग्राम को प्रत्येक क्वेरी के लिए एक नया कनेक्शन बनाना होगा।
आप SetMaxOpenConns पर कॉल करके अपने प्रोग्राम द्वारा उपयोग किए जाने वाले कनेक्शन की अधिकतम संख्या को सीमित कर सकते हैं। आपके sql.DB पर।
देखें http://go-database-sql.org/surprises.html अधिक जानकारी के लिए।