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

Pourquoi « json.Unmarshal » échoue-t-il lors de l'utilisation d'un pointeur mais réussit-il avec une référence ?

DDD
Libérer: 2024-11-19 20:05:03
original
388 Les gens l'ont consulté

Why Does `json.Unmarshal` Fail When Using a Pointer but Succeed with a Reference?

Unmarshaling JSON : dévoiler la différence entre référence et pointeur

Dans le domaine de l'analyse JSON, json.Unmarshal est un outil indispensable. Cependant, son comportement peut parfois laisser perplexe. Plus précisément, les utilisateurs peuvent se demander pourquoi le démarshaling fonctionne correctement lors de l'utilisation d'une référence mais échoue mystérieusement lors de l'utilisation d'un pointeur. Entrons dans le vif du sujet.

Référence vs pointeur

Dans le premier exemple, nous définissons « animaux » comme une variable de type Animal. Lorsque nous transmettons "&animaux" à Unmarshal, nous fournissons une référence à cette variable. Cela permet à Unmarshal de manipuler directement la structure d'origine.

En revanche, le deuxième exemple déclare "animaux" comme pointeur vers un type Animal. Les pointeurs contiennent l'adresse d'une autre variable, pas la variable elle-même. Passer "animaux" directement à Unmarshal signifie que nous passons un pointeur nul puisqu'il n'a pas été initialisé.

Le paradoxe

Assez curieusement, la documentation d'Unmarshal indique que il peut attribuer une nouvelle valeur au pointeur au cas où elle serait nulle. Alors, pourquoi le deuxième exemple échoue-t-il ?

Dévoilement de l'erreur

Le message d'erreur dans le deuxième exemple est en fait une InvalidUnmarshalError. Cette erreur est générée lorsque l'argument passé à Unmarshal est un pointeur non valide. Malgré la déclaration de la documentation, Unmarshal nécessite un pointeur non nul comme argument.

L'essentiel

Pour correctement Unmarshal JSON avec un pointeur, vous devez l'initialiser d'abord. Comme l'indique la documentation, cela peut être fait en attribuant simplement une valeur valide au pointeur avant d'appeler Unmarshal.

Unmarshalling vs. Unmarshaling

De plus, vous avez peut-être remarqué que la documentation utilise à la fois « unmarshaling » et « unmarshaling ». Bien que les deux orthographes soient considérées comme correctes, « unmarshaling » est l'usage le plus courant et préféré dans la communauté Go.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal