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!