Fehler bei der Schnittstellenkonvertierung während der JSON-Deserialisierung
Beim Versuch, komplexe Datenstrukturen aus JSON zu deserialisieren, ist es wichtig, die ordnungsgemäße Handhabung von Schnittstellen sicherzustellen, um dies zu vermeiden Laufzeitfehler. Betrachten Sie den folgenden Code:
type Data struct { Content string Links []string } func main() { anInterface := interface{}{/* JSON data here */} // Assertion to Data interface AData2 := anInterface.(Data) }
Bei der Ausführung gibt das Programm einen Fehler aus:
panic: interface conversion: interface {} is map[string]interface {}, not main.Data
Das Problem verstehen
Der Fehler liegt vor aus dem Versuch, eine Schnittstelle, die eine Zuordnung von String-Schnittstellen-Paaren enthält, direkt in eine Datenstruktur zu übernehmen. Go erwartet, dass die Schnittstelle einen Datenwert enthält, aber der eigentliche Inhalt ist eine Karte.
Lösung
Um dieses Problem zu lösen, ist es wichtig, die Natur von Schnittstellen zu verstehen . Eine Schnittstelle ist einfach ein Vertrag, der eine Reihe von Methoden definiert, die ein Typ implementieren muss. Um eine Schnittstelle für einen bestimmten Typ zu aktivieren, muss die Schnittstelle zuvor mit dem Wert dieses Typs gefüllt worden sein.
In diesem Fall sollten die folgenden Änderungen vorgenommen werden:
anInterface = Data{Content: "hello world", Links: []string{"link1", "link2", "link3"}}
AData2 = anInterface.(Data)
Dadurch wird sichergestellt, dass die Schnittstelle den richtigen Typ enthält, bevor versucht wird, ihn in Daten zu konvertieren.
Alternativer Ansatz
Ein anderer Ansatz besteht darin, die JSON-Daten direkt in die gewünschte Datenstruktur zu entmarshalieren:
var AData2 Data err := json.Unmarshal([]byte(jsonStr), &AData2) if err != nil { panic(err) }
Das obige ist der detaillierte Inhalt vonWarum erhalte ich während der JSON-Deserialisierung den Fehler „Schnittstellenkonvertierung: Schnittstelle {} ist Map[string]Schnittstelle {}, nicht main.Data'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!