Maison >développement back-end >Golang >Pourquoi ma désérialisation JSON génère-t-elle un échec d'assertion d'interface ?
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!