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

Pourquoi mon champ « Num » est-il ignoré lors de la désorganisation de JSON dans une structure intégrée dans Go ?

Susan Sarandon
Libérer: 2024-11-04 15:03:42
original
245 Les gens l'ont consulté

Why is my `Num` field ignored when unmarshalling JSON to an embedded struct in Go?

Désérialiser JSON vers des structures embarquées dans Go

La désérialisation des données JSON dans des structures embarquées peut présenter des défis dans Golang. Prenons l'exemple struct :

<code class="go">type Outer struct {
    Inner
    Num int
}

type Inner struct {
    Data string
}</code>
Copier après la connexion

Lors de l'utilisation de json.Unmarshal(data, &Outer{}), seul le champ Inner n'est pas marshalé, ignorant le champ Num. Pour comprendre pourquoi cela se produit, il est important de noter qu'Inner est intégré dans Outer.

Pendant le démarshalage JSON, la bibliothèque appelle le démarshaler sur Outer, qui à son tour appelle le démarshaler sur Inner. Par conséquent, la fonction Inner.UnmarshalJSON reçoit l'intégralité de la chaîne JSON, qu'elle traite pour Inner uniquement.

Pour résoudre ce problème, faites d'Inner un champ explicite dans Outer. Cela garantit que lors du démarshaling JSON, le champ Inner est correctement démarshalé et que le champ Num est défini en fonction des données JSON :

<code class="go">Outer struct {
    I Inner // Make Inner an explicit field
    Num int `json:"Num"`
}</code>
Copier après la connexion

Cette modification permet le démarshaling correct des données JSON dans la structure externe, y compris les champs Intérieur et Numérique.

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