Warum schlägt die Schnittstellenzusicherung während der JSON-Deserialisierung fehl?

Patricia Arquette
Freigeben: 2024-11-24 15:32:16
Original
587 Leute haben es durchsucht

Why does interface assertion fail during JSON deserialization?

Schnittstellenzusicherung schlägt während der JSON-Deserialisierung fehl

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
Nach dem Login kopieren

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)
}
Nach dem Login kopieren

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)
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage