json.Unmarshal डॉक्स (सादगी []Animal
के बजाय Animal
का उपयोग करने के लिए थोड़ा संशोधित) से इस उदाहरण से काम करता है, कोई त्रुटि:json.Unmarshal संदर्भ के साथ क्यों काम करता है लेकिन पॉइंटर नहीं?
Playground link of working example
// ...
var animals Animal
err := json.Unmarshal(jsonBlob, &animals)
// ...
लेकिन यह थोड़ा संशोधित उदाहरण नहीं करता है:
Playground link of non-working example
// ...
var animals *Animal
err := json.Unmarshal(jsonBlob, animals)
// ...
json: unmarshal (शून्य * main.Animal)
यह प्रतीत होता हैयह इस अस्पष्ट त्रुटि है कि वास्तव में सहायक (अधिक एक त्रुटि IMO की तुलना में एक समारोह कॉल की तरह दिखता है) नहीं है को प्रदर्शित करता है क्योंकि animals
एक प्रारंभिक सूचक है। लेकिन दस्तावेज़ कहते हैं (जोर मेरा):
उमरशाल जेएसओएन को पॉइंटर द्वारा इंगित मूल्य में अनारशल करता है। यदि पॉइंटर शून्य है, तो Unmarshal इसके लिए इंगित करने के लिए एक नया मान आवंटित करता है।
तो क्यों दूसरे उदाहरण में अशांति विफल हो रही है और अस्पष्ट त्रुटि दिखाती है?
ठीक है, लेकिन फिर उमरशाल के लिए प्रलेखन में इसका क्या अर्थ है: "यदि सूचक शून्य है, तो अनमारशल इसके लिए एक नया मान आवंटित करता है।" अगर उमरशाल हमारे लिए ऐसा कर रहा है तो हमें इसे क्यों शुरू करना होगा? – Matt
हाहा, हाँ मैंने अभी आपके प्रश्न में देखा है। खैर, यदि आप सूचक के संदर्भ में पास करते हैं, तो यह भी आवंटित करता है। http://play.golang.org/p/3KP7pPKmBp –
दिलचस्प। तो क्या मेरी समझ है कि "पॉइंटर" का अर्थ गलत है या क्या दस्तावेज़ गलत हैं? क्योंकि मैं यहां काम करने वाले सभी संदर्भ संदर्भ हैं, पॉइंटर्स नहीं। – Matt