Maison > développement back-end > Golang > le corps du texte

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

DDD
Libérer: 2024-10-26 02:44:02
original
324 Les gens l'ont consulté

Here are a few title options, keeping in mind the need for a question format:

* **Why Does `json.Unmarshal` Return a Map Instead of a  Struct in Go?** (Simple and direct)
* **Golang: Unmarshaling into an Interface - Why is My Struct a Map?** (More specif

Pourquoi json.Unmarshal renvoie-t-il une carte au lieu de la structure attendue ?

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!