Maison > développement back-end > Golang > Pourquoi le démarshaling dans un pointeur non initialisé échoue-t-il lors de Go ?

Pourquoi le démarshaling dans un pointeur non initialisé échoue-t-il lors de Go ?

Mary-Kate Olsen
Libérer: 2024-11-21 00:50:12
original
916 Les gens l'ont consulté

Why Does Unmarshaling into an Uninitialized Pointer Fail in Go?

Désérialisation en références et pointeurs

Dans le processus de désérialisation des données JSON en structures Go, la fonction json.Unmarshal joue un rôle crucial. Cependant, les utilisateurs peuvent rencontrer des divergences lorsqu'ils tentent de désorganiser les références et les pointeurs.

Considérez les extraits de code suivants :

// Unmarshaling into a reference variable
var animals Animal
err := json.Unmarshal(jsonBlob, &animals)
Copier après la connexion

Ce code réussit à désorganiser les données JSON dans la variable de référence des animaux.

Cependant, un résultat différent se produit lors de la tentative de démarshal dans une variable de pointeur :

// Unmarshaling into a pointer variable
var animals *Animal
err := json.Unmarshal(jsonBlob, animals)
Copier après la connexion

Dans ce cas, Unmarshal échoue avec une erreur obscure : "json: Unmarshal(nil *main.Animal )". Cette erreur se produit car les animaux sont un pointeur non initialisé.

La documentation d'Unmarshal indique que "Si le pointeur est nul, Unmarshal lui alloue une nouvelle valeur vers laquelle pointer." Cependant, ce comportement ne semble pas s'appliquer dans le cas de pointeurs non initialisés, comme en témoigne le message d'erreur.

Pour résoudre ce problème, il est recommandé d'initialiser la variable du pointeur animaux avant de tenter de le désorganiser :

animals = &Animal{}
err := json.Unmarshal(jsonBlob, animals)
Copier après la connexion

Avec cette modification, le processus de démarshalage devrait réussir.

Notez que dans la documentation, le terme « démarshaling » est utilisé de manière cohérente.

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