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

परावर्तन का उपयोग करके नेस्टेड संरचनाओं में फ़ील्ड पते कैसे प्राप्त करें?

2024-11-10 को प्रकाशित
ब्राउज़ करें:972

How to Obtain Field Addresses in Nested Structures Using Reflection?

प्रतिबिंब का उपयोग करके नेस्टेड संरचनाओं में फ़ील्ड पते प्राप्त करना

इस परिदृश्य में, आप नेस्टेड संरचनाओं को पार करना और जांचना चाहते हैं और गैर के पते प्राप्त करना चाहते हैं -उनके भीतर सूचक फ़ील्ड। प्रतिबिंब का उपयोग करते हुए, आपके पास एक फ़ंक्शन है जो फ़ील्ड के माध्यम से पुनरावृत्त होता है लेकिन एम्बेडेड सबस्ट्रक्चर में स्थित गैर-पॉइंटर फ़ील्ड के मेमोरी पते को प्राप्त करने में कठिनाइयों का सामना करता है।

इस समस्या को सुधारने के लिए, यह ध्यान रखना महत्वपूर्ण है कि valueField.Interface() करता है अपेक्षित परिणाम प्रदान नहीं करता क्योंकि यह फ़ील्ड के भीतर संग्रहीत वास्तविक मान लौटाता है, जो गैर-सूचक प्रकारों के साथ काम करते समय मान्य नहीं है।

समाधान एक प्रतिबिंबित प्राप्त करने के लिए InspectStructV फ़ंक्शन को संशोधित करने में निहित है। एक इंटरफ़ेस{}. यह आपको सीधे प्रतिबिंब वस्तु में हेरफेर करने और फ़ील्ड का पता पुनः प्राप्त करने की अनुमति देता है। इसके अतिरिक्त, जब स्ट्रक्चर फ़ील्ड के लिए InspectStructV को पुनरावर्ती रूप से कॉल किया जाता है, तो वैल्यूफ़ील्ड, जो पहले इंटरफ़ेस मान रखता था, अब सीधे नेस्टेड संरचना के लिए प्रतिबिंब मान को इंगित करता है, यह सुनिश्चित करता है कि पता सही ढंग से पुनर्प्राप्त किया जा सकता है।

यहां संशोधित कोड है स्निपेट:

func InspectStructV(val reflect.Value) {
    if val.Kind() == reflect.Interface && !val.IsNil() {
        elm := val.Elem()
        if elm.Kind() == reflect.Ptr && !elm.IsNil() && elm.Elem().Kind() == reflect.Ptr {
            val = elm
        }
    }
    if val.Kind() == reflect.Ptr {
        val = val.Elem()
    }

    for i := 0; i 

ये परिवर्तन करके, आप गैर-पॉइंटर फ़ील्ड के मेमोरी पते को सफलतापूर्वक पुनर्प्राप्त करने में सक्षम होंगे, भले ही वे नेस्टेड संरचनाओं के भीतर रहते हों।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3