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

CanSet() और स्ट्रक्चर्स के साथ स्ट्रक्चर फील्ड्स को संशोधित करने के लिए रिफ्लेक्शन का उपयोग कैसे करें?

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

How to Use Reflection to Modify Struct Fields with CanSet() and Structs?

संरचना क्षेत्रों को संशोधित करने के लिए प्रतिबिंब का उपयोग करना: CanSet() और संरचनाएं

संरचना क्षेत्रों को संशोधित करने के लिए प्रतिबिंब का उपयोग करते समय, सिद्धांतों को समझना महत्वपूर्ण है फ़ील्ड पहुंच और संशोधन के पीछे।

CanSet() के लिए Structs

आपके उदाहरण में, आपको CanSet() का सामना करना पड़ा जो struct फ़ील्ड्स के लिए गलत रिटर्न दे रहा था। ऐसा इसलिए है क्योंकि डिफ़ॉल्ट रूप से, गो प्रतिबिंब का उपयोग करके किसी संरचना के गैर-निर्यातित (निजी) फ़ील्ड को संशोधित करने की अनुमति नहीं देता है। यह आंतरिक संरचना स्थिति के आकस्मिक या दुर्भावनापूर्ण संशोधन को रोकने के लिए एक सुरक्षा उपाय है। चरण:

एक मान संशोधित करें:

अपने SetField() फ़ंक्शन को कॉल करते समय, पॉइंटर को पास करें संरचना, स्वयं संरचना मूल्य नहीं। यह आपको प्रतिलिपि को नहीं, बल्कि वास्तविक संरचना को संशोधित करने की अनुमति देता है। (source).Elem() नुकीली संरचना का प्रतिबिम्ब.मूल्य प्राप्त करने के लिए। यह वास्तविक संरचना मान पर नेविगेट करता है। संशोधित करना. यह सुनिश्चित करता है कि आप सही फ़ील्ड तक पहुंच रहे हैं और अधिक कुशल है।

  1. संशोधित कोड
  2. यहां संशोधित कोड है जो समस्याओं का समाधान करता है:
  3. func SetField(स्रोत इंटरफ़ेस{}, फ़ील्डनाम स्ट्रिंग, फ़ील्डवैल्यू स्ट्रिंग) { v := प्रतिबिंबित.ValueOf(स्रोत).Elem() fmt.Println(v.FieldByName(fieldName).CanSet()) यदि v.FieldByName(fieldName).CanSet() { v.FieldByName(fieldName).SetString(fieldValue) } } func मुख्य() { स्रोत := प्रोडक्शनइन्फो {} source.StructA = संलग्न करें(source.StructA, प्रविष्टि{फ़ील्ड1: "ए", फ़ील्ड2: 2}) fmt.Println("पहले:", source.StructA[0]) सेटफ़ील्ड(&source.StructA[0], "फ़ील्ड1", "NEW_VALUE") fmt.Println("बाद में:", source.StructA[0]) }
  4. यह कोड अब एंट्री संरचना के फ़ील्ड1 मान को सफलतापूर्वक संशोधित करेगा।
विज्ञप्ति वक्तव्य यह लेख यहां पुनर्मुद्रित है: 1729741550 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए स्टडी_गोलंग@163.कॉम से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

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

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

Copyright© 2022 湘ICP备2022001581号-3