Maison > Article > développement back-end > Pourquoi l'assertion d'interface échoue-t-elle 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
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) }
À 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) }
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!