Unmarshaling von JSON: Enthüllung des Unterschieds zwischen Referenz und Zeiger
Im Bereich der JSON-Analyse ist json.Unmarshal ein unverzichtbares Werkzeug. Allerdings kann sein Verhalten manchmal rätselhaft sein. Insbesondere fragen sich Benutzer möglicherweise, warum das Unmarshaling bei Verwendung einer Referenz reibungslos funktioniert, bei Verwendung eines Zeigers jedoch auf mysteriöse Weise fehlschlägt. Lassen Sie uns ins Detail gehen.
Referenz vs. Zeiger
Im ersten Beispiel definieren wir „Tiere“ als Variable vom Typ „Tier“. Wenn wir „&animals“ an Unmarshal übergeben, stellen wir einen Verweis auf diese Variable bereit. Dadurch kann Unmarshal die ursprüngliche Struktur direkt manipulieren.
Im Gegensatz dazu deklariert das zweite Beispiel „animals“ als Zeiger auf einen Animal-Typ. Zeiger enthalten die Adresse einer anderen Variablen, nicht die Variable selbst. Die direkte Übergabe von „Tieren“ an Unmarshal bedeutet, dass wir einen Nullzeiger übergeben, da dieser nicht initialisiert wurde.
Das Paradoxon
Seltsamerweise steht dies in der Dokumentation für Unmarshal Es kann dem Zeiger einen neuen Wert zuweisen, falls dieser Null ist. Warum schlägt das zweite Beispiel also fehl?
Enthüllung des Fehlers
Die Fehlermeldung im zweiten Beispiel ist tatsächlich ein InvalidUnmarshalError. Dieser Fehler wird ausgelöst, wenn das an Unmarshal übergebene Argument ein ungültiger Zeiger ist. Entgegen der Aussage in der Dokumentation erfordert Unmarshal einen Zeiger ungleich Null als Argument.
Das Fazit
Um JSON ordnungsgemäß mit einem Zeiger zu entmarshalieren, müssen Sie ihn initialisieren Erste. Wie aus der Dokumentation hervorgeht, kann dies dadurch erreicht werden, dass dem Zeiger vor dem Aufruf von Unmarshal einfach ein gültiger Wert zugewiesen wird.
Unmarshalling vs. Unmarshaling
Außerdem haben Sie es vielleicht bemerkt dass in der Dokumentation sowohl „Unmarshalling“ als auch „Unmarshalling“ verwendet wird. Obwohl beide Schreibweisen als korrekt gelten, ist „unmarshaling“ die häufigere und bevorzugte Verwendung in der Go-Community.
Das obige ist der detaillierte Inhalt vonWarum schlägt „json.Unmarshal' fehl, wenn ein Zeiger verwendet wird, aber mit einer Referenz erfolgreich ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!