Heim >Backend-Entwicklung >Golang >Warum schlägt das Unmarshaling in einen nicht initialisierten Zeiger in Go fehl?
Unmarshaling in Referenzen und Zeiger
Beim Deserialisieren von JSON-Daten in Go-Strukturen spielt die Funktion json.Unmarshal eine entscheidende Rolle. Allerdings kann es bei Benutzern zu Unstimmigkeiten kommen, wenn sie versuchen, in Referenzen und Zeiger zu entpacken.
Beachten Sie die folgenden Codeausschnitte:
// Unmarshaling into a reference variable var animals Animal err := json.Unmarshal(jsonBlob, &animals)
Dieser Code entpackt die JSON-Daten erfolgreich in die Referenzvariable „Tiere“.
Jedoch ergibt sich ein anderes Ergebnis, wenn versucht wird, eine Zeigervariable zu entmarshalieren:
// Unmarshaling into a pointer variable var animals *Animal err := json.Unmarshal(jsonBlob, animals)
In diesem Fall schlägt Unmarshal mit einem obskuren Fehler fehl: „json: Unmarshal(nil *main.Animal )". Dieser Fehler tritt auf, weil Animals ein nicht initialisierter Zeiger ist.
In der Dokumentation für Unmarshal heißt es: „Wenn der Zeiger Null ist, weist Unmarshal einen neuen Wert zu, auf den er zeigen soll.“ Dieses Verhalten scheint jedoch bei nicht initialisierten Zeigern nicht zuzutreffen, wie aus der Fehlermeldung hervorgeht.
Um dieses Problem zu beheben, wird empfohlen, die Zeigervariable Animals zu initialisieren, bevor versucht wird, sie zu entmarshalieren:
animals = &Animal{} err := json.Unmarshal(jsonBlob, animals)
Mit dieser Änderung sollte der Unmarshaling-Prozess erfolgreich sein.
Beachten Sie, dass in der Dokumentation der Begriff „Unmarshaling“ durchgängig verwendet wird.
Das obige ist der detaillierte Inhalt vonWarum schlägt das Unmarshaling in einen nicht initialisierten Zeiger in Go fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!