Beim Versuch, eine Schnittstelle zu einem bestimmten Strukturtyp nach der Deserialisierung von JSON zu bestätigen, tritt ein Fehler auf:
panic: interface conversion: interface {} is map[string]interface {}, not main.Data
Dieses Problem tritt auf, weil die Behauptung auf einen inkompatiblen Typ angewendet wird. Eine Schnittstelle kann nur dann in einen bestimmten Typ konvertiert werden, wenn ihr ursprünglich ein Wert dieses Typs zugewiesen wurde.
Im bereitgestellten Code wird der Schnittstelle anInterface der Wert der Datenstruktur AData zugewiesen. Daher kann „anInterface“ sicher gegenüber Daten geltend gemacht werden.
type Data struct { Content string Links []string } func main() { var AData, AData2 Data var anInterface interface{} // populate data AData.Content = "hello world" AData.Links = []string{"link1", "link2", "link3"} anInterface = AData AData2 = anInterface.(Data) }
Umgekehrt könnte, wenn der Schnittstelle „anInterface“ ein Wert vom Typ „map[string]interface{} zugewiesen wurde, dieser nicht gegenüber Daten geltend gemacht werden.
Um JSON-Daten direkt in eine Datenstruktur zu deserialisieren, verwenden Sie die Funktion json.Unmarshal().
var AData2 Data err = json.Unmarshal([]byte(value), &AData2) if err != nil { panic(err) }
Das obige ist der detaillierte Inhalt vonWarum schlägt die Schnittstellenzusicherung während der JSON-Deserialisierung fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!