Heim >Backend-Entwicklung >Golang >Warum schlägt die Schnittstellenzusicherung während der JSON-Deserialisierung fehl?

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

Patricia Arquette
Patricia ArquetteOriginal
2024-11-24 15:32:16662Durchsuche

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

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!

Stellungnahme:
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