Dans cet exemple de terrain de jeu, json.Unmarshal renvoie une carte au lieu de la structure attendue : http ://play.golang.org/p/dWku6SPqj5.
Le problème survient car un paramètre interface{} est transmis à json.Unmarshal et la bibliothèque tente de le désorganiser dans un tableau d'octets. Cependant, la bibliothèque n'a pas de référence directe à la structure correspondante, même si elle a une référence Reflect.Type.
Le problème réside dans le code suivant :
var ping interface{} = Ping{}
deserialize([]byte(`{"id":42}`), &ping)
fmt.Println("DONE:", ping) // It's a simple map now, not a Ping. Why?
Pour résoudre ce problème, transmettez explicitement un pointeur vers la structure Ping en tant qu'interface abstraite :
var ping interface{} = &Ping{}
deserialize([]byte(`{"id":42}`), ping)
fmt.Println("DONE:", ping)
Vous pouvez également créer un nouveau pointeur à l'aide de Reflect, le désérialiser, puis recopier la valeur :
var ping interface{} = Ping{}
nptr := reflect.New(reflect.TypeOf(ping))
deserialize([]byte(`{"id":42}`), nptr.Interface())
ping = nptr.Interface()
fmt.Println("DONE:", ping)
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3