] सवाल। हालांकि, यह अपने तर्कों के रूप में बिंदुओं की एक चर संख्या का उपयोग करता है, जो प्रतिबिंब का उपयोग करने के लिए चुनौतीपूर्ण हो सकता है। निम्नलिखित परिदृश्य पर विचार करें:
आप एक क्वेरी से प्राप्त मूल्यों के साथ एक स्लाइस को गतिशील रूप से पॉप्युलेट करना चाहते हैं और डेटा निकालने के लिए rows.scan () का उपयोग करें। इस मामले में, आपको कॉलम की संख्या निर्धारित करने और मानों को संग्रहीत करने के लिए एक स्लाइस बनाने की आवश्यकता होगी। स्कैन () फ़ंक्शन से अप्रत्याशित परिणाम हो सकते हैं। इसका कारण यह है कि rows.scan () मूल्यों के लिए संकेत की अपेक्षा करता है, और बस इंटरफ़ेस का एक टुकड़ा पास करने के लिए {} मानों के परिणामस्वरूप शून्य संदर्भ होगा।
समाधान: ] प्रतिबिंब के साथ स्कैन () को सफलतापूर्वक कॉल करने के लिए, एक दोहरे-स्लाइस दृष्टिकोण को नियोजित किया जाता है। पहला स्लाइस, मान, वास्तविक डेटा रखता है, जबकि दूसरा स्लाइस, वैल्यूप्ट्र्स में प्रत्येक तत्व को मानों में पॉइंटर्स होते हैं।
क्वेरी परिणाम में प्रत्येक कॉलम के लिए, मानों में एक पॉइंटर को संबंधित तत्व के लिए मैप किया जाता है। मूल्यों में। इसके बाद, rows.scan () को अपने तर्क के रूप में मानों के साथ आमंत्रित किया जा सकता है, प्रभावी रूप से मान भरने के लिए। आयात ( "एफएमटी" _ "github.com/lib/pq" "डेटाबेस/एसक्यूएल" ) func मुख्य () { db, _: = sql.open ( "पोस्टग्रेस", "उपयोगकर्ता = Postgres dbname = go_testing पासवर्ड = पास sslmode = अक्षम करें") पंक्तियाँ, _: = db.query ("_user से चयन करें;") कॉलम, _: = row.columns () गिनती: = लेन (स्तंभ) मान: = मेक ([] इंटरफ़ेस {}, गिनती) ValuesPtrs: = बनाओ ([] इंटरफ़ेस {}, गिनती) पंक्तियों के लिए। के लिए i: = रेंज कॉलम { ValuesPtrs [i] = और मान [i] } rows.scan (ValuesPtrs ...) के लिए, col: = रेंज कॉलम { वैल: = मान [i] बी, ओके: = वैल। ([] बाइट) var v इंटरफ़ेस {} अगर (ठीक है) { वी = स्ट्रिंग (बी) } अन्य { वी = वैल } fmt.println (Col, v) } } … लूप तब प्रत्येक कॉलम नाम और उसके संबंधित मान को प्रिंट करता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3