Maison > développement back-end > Golang > Pourquoi « json.Unmarshal » renvoie-t-il une « InvalidUnmarshalError » lors de l'utilisation d'un pointeur non initialisé ?

Pourquoi « json.Unmarshal » renvoie-t-il une « InvalidUnmarshalError » lors de l'utilisation d'un pointeur non initialisé ?

Susan Sarandon
Libérer: 2024-11-12 09:32:01
original
554 Les gens l'ont consulté

Why Does `json.Unmarshal` Throw an `InvalidUnmarshalError` When Using an Uninitialized Pointer?

JSON Unmarshal : pointeur contre référence

Récemment, les utilisateurs ont remarqué un comportement inattendu lors de l'utilisation de json.Unmarshal lors du passage de pointeurs. Voyons pourquoi la différence existe.

Dans la documentation officielle, nous rencontrons une déclaration qui suggère qu'Unmarshal alloue automatiquement une nouvelle valeur vers laquelle pointer si le pointeur est initialement nul :

Unmarshal déclasse le JSON dans la valeur pointée par le pointeur. Si le pointeur est nul, Unmarshal lui alloue une nouvelle valeur vers laquelle pointer.

Cependant, lorsque nous essayons d'utiliser Unmarshal avec un pointeur non initialisé, nous rencontrons une InvalidUnmarshalError :

// An InvalidUnmarshalError décrit un argument non valide transmis à Unmarshal.

// (L'argument à Unmarshal doit être un pointeur non nul.)

Cette erreur est en conflit avec la suggestion de la documentation de allocation automatique de mémoire.

Pour résoudre cet écart, il est crucial d'aborder la différence subtile entre l'utilisation d'une référence et d'un pointeur. Dans le premier exemple où le code fonctionne, l'utilisation de &animals crée une référence à la variable, garantissant qu'elle est toujours non nulle. Ce comportement de référence s'aligne sur la fonctionnalité attendue.

En revanche, le deuxième exemple utilise un pointeur non initialisé (*animaux), qui représente un argument invalide aux yeux d'Unmarshal. L'erreur qu'il génère reflète ce problème avec précision.

En guise de note finale, l'orthographe correcte du mot est « unmarshaling », selon la documentation officielle.

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