"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > डेटाबेस/sql rows.scan () वेरिएडिक फ़ंक्शन को कॉल करने के लिए प्रतिबिंब का उपयोग कैसे करें?

डेटाबेस/sql rows.scan () वेरिएडिक फ़ंक्शन को कॉल करने के लिए प्रतिबिंब का उपयोग कैसे करें?

2025-02-06 पर पोस्ट किया गया
ब्राउज़ करें:617

] सवाल। हालांकि, यह अपने तर्कों के रूप में बिंदुओं की एक चर संख्या का उपयोग करता है, जो प्रतिबिंब का उपयोग करने के लिए चुनौतीपूर्ण हो सकता है। निम्नलिखित परिदृश्य पर विचार करें:

How to Use Reflection to Call the Database/SQL Rows.Scan() Variadic Function?
आप एक क्वेरी से प्राप्त मूल्यों के साथ एक स्लाइस को गतिशील रूप से पॉप्युलेट करना चाहते हैं और डेटा निकालने के लिए 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