संरचनाओं के लिए सेटस्ट्रिंग के साथ प्रतिबिंब की खोज
प्रतिबिंब गो संरचनाओं को गतिशील रूप से हेरफेर करने के लिए शक्तिशाली उपकरण प्रदान करता है। इस उदाहरण में, प्रतिबिंब का उपयोग करके एक संरचना फ़ील्ड का मान सेट करने का प्रयास करते समय हमें एक सामान्य समस्या का सामना करना पड़ता है: CanSet() हमेशा गलत रिटर्न देता है। यह बाधा फ़ील्ड संशोधनों को रोकती है, जिससे हम असमंजस में पड़ जाते हैं। ]
पॉइंटर के बजाय एक मान पास करना:मान द्वारा संरचनाओं को प्रतिबिंब के माध्यम से संशोधित नहीं किया जा सकता है। इसके बजाय, हमें संरचना में एक पॉइंटर पास करना होगा, यह सुनिश्चित करते हुए कि कोई भी परिवर्तन वास्तविक ऑब्जेक्ट पर लागू होता है।
गलत तत्व लक्ष्यीकरण:कोड प्रारंभ में संपूर्ण प्रोडक्शनइन्फो संरचना पर काम करता है विशिष्ट प्रविष्टि जिसके फ़ील्ड1 मान को बदलने की आवश्यकता है। इसे सुधारने के लिए, हमें वांछित प्रवेश तत्व पर ध्यान केंद्रित करने की आवश्यकता है। &&&]
कोड इन करें क्रिया
इन संशोधनों के साथ, कोड अब फ़ील्ड1 मान को सफलतापूर्वक अपडेट करता है:
func SetField(source interface{}, fieldName string, fieldValue string) {
v := reflect.ValueOf(source).Elem() // Obtain the value of the pointed object
fmt.Println(v.FieldByName(fieldName).CanSet())
if v.FieldByName(fieldName).CanSet() {
v.FieldByName(fieldName).SetString(fieldValue)
}
}
आउटपुट:
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3