Maison >développement back-end >Golang >Pourquoi ma désérialisation JSON génère-t-elle un échec d'assertion d'interface ?

Pourquoi ma désérialisation JSON génère-t-elle un échec d'assertion d'interface ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-27 06:41:09351parcourir

Why Does My JSON Deserialization Throw an Interface Assertion Failure?

Échec de l'assertion d'interface lors de la désérialisation JSON

Problème :

Lors de la tentative d'assertion d'une interface à un type de structure spécifique après lors de la désérialisation à partir de JSON, une erreur est générée indiquant que l'interface n'est pas celle attendue tapez.

Erreur spécifique :

panic: interface conversion: interface {} is map[string]interface {}, not main.Data

Détails :

Le code tente de désérialiser les données JSON dans une interface puis affirmez l’interface avec une structure Data. Cependant, au moment de l'exécution, Go s'attend à ce que l'interface soit une map[string]interface{} au lieu d'un objet Data.

Solution :

Assertion d'interface appropriée :

Les interfaces ne peuvent être attribuées à aucun type de structure arbitraire. Ils doivent être affirmés avec le type correct représenté par l'interface. Dans ce cas, l'interface ne peut être affirmée à une structure Data que si une valeur de ce type lui a d'abord été attribuée.

Démarshaling direct :

Pour éviter le besoin d'assertions d'interface, il est Il est recommandé de désorganiser directement les données JSON dans le type de structure souhaité. Cela garantit que les données sont correctement converties sans avoir besoin d'assertions intermédiaires.

Exemple de code :

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)
    }
}

En décomposant directement les données JSON dans la structure AData, le besoin d'assertions d'interface est éliminé, garantissant une conversion correcte des données.

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!

Déclaration:
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