Warum schlägt „json.Unmarshal' fehl, wenn ein Zeiger verwendet wird, aber mit einer Referenz erfolgreich ist?

DDD
Freigeben: 2024-11-19 20:05:03
Original
383 Leute haben es durchsucht

Why Does `json.Unmarshal` Fail When Using a Pointer but Succeed with a Reference?

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage