Heim >Backend-Entwicklung >Golang >Warum löst meine JSON-Deserialisierung einen Schnittstellen-Assertionsfehler aus?
Problem:
Beim Versuch, danach eine Schnittstelle für einen bestimmten Strukturtyp zu bestätigen Beim Deserialisieren von JSON wird ein Fehler ausgegeben, der besagt, dass die Schnittstelle nicht den Erwartungen entspricht Typ.
Spezifischer Fehler:
panic: interface conversion: interface {} is map[string]interface {}, not main.Data
Details:
Der Code versucht, JSON-Daten in eine Schnittstelle zu deserialisieren und bestätigen Sie dann die Schnittstelle zu einer Datenstruktur. Zur Laufzeit erwartet Go jedoch, dass die Schnittstelle eine Map[string]interface{} und kein Datenobjekt ist.
Lösung:
Richtige Schnittstellenbehauptung:
Schnittstellen können keinem beliebigen Strukturtyp zugewiesen werden. Sie müssen dem richtigen Typ zugeordnet werden, den die Schnittstelle darstellt. In diesem Fall kann die Schnittstelle nur dann einer Datenstruktur zugeordnet werden, wenn ihr zuerst ein Wert dieses Typs zugewiesen wurde.
Direktes Unmarshaling:
Um die Notwendigkeit von Schnittstellenzusicherungen zu vermeiden, ist dies der Fall Es wird empfohlen, die JSON-Daten direkt in den gewünschten Strukturtyp zu entmarshalieren. Dadurch wird sichergestellt, dass die Daten ordnungsgemäß konvertiert werden, ohne dass Zwischenzusicherungen erforderlich sind.
Codebeispiel:
type Data struct { Content string Links []string } func main() { var AData Data // Deserialize JSON directly into the Data struct err = json.Unmarshal([]byte(value), &AData) if err != nil { panic(err) } }
Durch direktes Unmarshaling der JSON-Daten in die AData-Struktur, Die Notwendigkeit von Schnittstellenzusicherungen entfällt und gewährleistet eine ordnungsgemäße Datenkonvertierung.
Das obige ist der detaillierte Inhalt vonWarum löst meine JSON-Deserialisierung einen Schnittstellen-Assertionsfehler aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!