Maison >développement back-end >Golang >Voici quelques options de titre, en gardant à l'esprit la nécessité d'un format de question : * **Pourquoi `json.Unmarshal` renvoie-t-il une carte au lieu d'une structure dans Go ?** (Simple et direct) * **Golang : démarshalisation de l'int
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 :
<code class="go">var ping interface{} = Ping{} deserialize([]byte(`{"id":42}`), &ping) fmt.Println("DONE:", ping) // It's a simple map now, not a Ping. Why?</code>
Pour résolvez ce problème, soit transmettez explicitement un pointeur vers la structure Ping en tant qu'interface abstraite :
<code class="go">var ping interface{} = &Ping{} deserialize([]byte(`{"id":42}`), ping) fmt.Println("DONE:", ping)</code>
Alternativement, si un pointeur direct n'est pas disponible, créez un nouveau pointeur à l'aide de Reflect, désérialisez-le, puis copiez-le. la valeur en retour :
<code class="go">var ping interface{} = Ping{} nptr := reflect.New(reflect.TypeOf(ping)) deserialize([]byte(`{"id":42}`), nptr.Interface()) ping = nptr.Interface() fmt.Println("DONE:", ping)</code>
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!