इस खेल के मैदान के उदाहरण में, json.Unmarshal अपेक्षित संरचना के बजाय एक नक्शा लौटाता है: http ://play.golang.org/p/dWku6SPqj5.
समस्या उत्पन्न होती है क्योंकि एक इंटरफ़ेस{} पैरामीटर पास किया जाता है json.Unmarshal, और लाइब्रेरी इसे बाइट सरणी में अनमर्शल करने का प्रयास करती है। हालाँकि, लाइब्रेरी में संबंधित संरचना का सीधा संदर्भ नहीं है, भले ही इसमें एक प्रतिबिंबित प्रकार का संदर्भ हो।
समस्या निम्नलिखित कोड में है:
var ping interface{} = Ping{}
deserialize([]byte(`{"id":42}`), &ping)
fmt.Println("DONE:", ping) // It's a simple map now, not a Ping. Why?
इस समस्या को हल करने के लिए, या तो पिंग संरचना में स्पष्ट रूप से एक अमूर्त इंटरफ़ेस के रूप में एक पॉइंटर पास करें:
var ping interface{} = &Ping{}
deserialize([]byte(`{"id":42}`), ping)
fmt.Println("DONE:", ping)
वैकल्पिक रूप से, यदि कोई प्रत्यक्ष सूचक अनुपलब्ध है, तो रिफ्लेक्ट का उपयोग करके एक नया सूचक बनाएं, उसमें डीसेरिएलाइज़ करें, और फिर मान को वापस कॉपी करें:
var ping interface{} = Ping{}
nptr := reflect.New(reflect.TypeOf(ping))
deserialize([]byte(`{"id":42}`), nptr.Interface())
ping = nptr.Interface()
fmt.Println("DONE:", ping)
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3