Heim > Artikel > Backend-Entwicklung > Warum wirft „json.Unmarshal' einen „InvalidUnmarshalError' aus, wenn ein nicht initialisierter Zeiger verwendet wird?
Kürzlich haben Benutzer unerwartetes Verhalten bei der Verwendung von json.Unmarshal beim Übergeben von Zeigern bemerkt. Lassen Sie uns untersuchen, warum der Unterschied besteht.
In der offiziellen Dokumentation stoßen wir auf eine Aussage, die darauf hindeutet, dass Unmarshal automatisch einen neuen Wert zuweist, auf den gezeigt werden soll, wenn der Zeiger anfänglich Null ist:
Unmarshal entmarshmiert den JSON in den Wert, auf den der Zeiger zeigt. Wenn der Zeiger Null ist, weist Unmarshal einen neuen Wert zu, auf den er zeigen soll.
Wenn wir jedoch versuchen, Unmarshal mit einem nicht initialisierten Zeiger zu verwenden, stoßen wir auf einen InvalidUnmarshalError:
// Ein InvalidUnmarshalError beschreibt ein ungültiges Argument, das an Unmarshal übergeben wurde.
// (Das Argument an Unmarshal muss ein Nicht-Null-Zeiger sein.)
Dieser Fehler steht im Widerspruch zum Vorschlag der Dokumentation automatische Speicherzuweisung.
Um diese Diskrepanz zu beheben, ist es wichtig, den subtilen Unterschied zwischen der Verwendung einer Referenz und eines Zeigers zu berücksichtigen. Im ersten Beispiel, in dem der Code funktioniert, erstellt die Verwendung von &animals einen Verweis auf die Variable und stellt so sicher, dass sie immer ungleich Null ist. Dieses Referenzverhalten stimmt mit der erwarteten Funktionalität überein.
Im Gegensatz dazu verwendet das zweite Beispiel einen nicht initialisierten Zeiger (*Tiere), der in den Augen von Unmarshal ein ungültiges Argument darstellt. Der Fehler, den es generiert, spiegelt dieses Problem genau wider.
Abschließend sei noch erwähnt, dass die korrekte Schreibweise des Wortes laut offizieller Dokumentation „unmarshaling“ ist.
Das obige ist der detaillierte Inhalt vonWarum wirft „json.Unmarshal' einen „InvalidUnmarshalError' aus, wenn ein nicht initialisierter Zeiger verwendet wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!