Maison > développement back-end > Golang > Pourquoi l'assertion d'interface échoue-t-elle lors de la désérialisation JSON ?

Pourquoi l'assertion d'interface échoue-t-elle lors de la désérialisation JSON ?

Patricia Arquette
Libérer: 2024-11-24 15:32:16
original
651 Les gens l'ont consulté

Why does interface assertion fail during JSON deserialization?

L'assertion d'interface échoue lors de la désérialisation JSON

Lors de la tentative d'affirmation d'une interface sur un type de structure spécifique après la désérialisation à partir de JSON, une erreur se produit :

panic: interface conversion: interface {} is map[string]interface {},
not main.Data
Copier après la connexion

Ce problème se pose car l'assertion est faite sur un type incompatible. Une interface ne peut être convertie en un type spécifique que si une valeur de ce type lui a été initialement attribuée.

Dans le code fourni, l'interface anInterface se voit attribuer la valeur de la structure Data AData. Par conséquent, anInterface peut être affirmée en toute sécurité à Data.

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)
}
Copier après la connexion

À l'inverse, si l'interface anInterface se voyait attribuer une valeur de type map[string]interface{}, elle ne pourrait pas être affirmée à Data.

Pour désérialiser directement les données JSON dans une structure Data, utilisez la fonction json.Unmarshal().

var AData2 Data

err = json.Unmarshal([]byte(value), &AData2)
if err != nil {
    panic(err)
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal