Maison > développement back-end > Golang > Pourquoi la comparaison d'une instance Nil Struct à Nil renvoie-t-elle « L'erreur n'est pas nulle » ?

Pourquoi la comparaison d'une instance Nil Struct à Nil renvoie-t-elle « L'erreur n'est pas nulle » ?

Linda Hamilton
Libérer: 2024-10-30 08:56:02
original
799 Les gens l'ont consulté

Why Does Comparing a Nil Struct Instance to Nil Return

Comparaisons d'interfaces avec des valeurs nulles

Question :

Malgré la déclaration d'une instance nulle d'une structure qui satisfait l'interface d'erreur , pourquoi la comparaison à nil renvoie-t-elle « L'erreur n'est pas nulle » ?

Réponse :

Les comparaisons d'interface dans Go prennent en compte à la fois le type et la valeur des entités comparées. Lorsque l'on compare une instance d'erreur à nil, ce qui suit se produit :

  • L'instance nil de l'interface d'erreur a une valeur nulle et un type nul (erreur (nil)).
  • Le nil L'instance de la structure Goof a une valeur nulle mais un type non nul (*Goof).

Par conséquent, bien que les deux instances soient initialisées avec des valeurs nulles, leurs types différents entraînent une comparaison inégale.

Pour résoudre ce problème et renvoyer la sortie attendue "L'erreur est nulle", l'instance nulle doit être affectée à une variable d'erreur, car sa valeur zéro est erreur (nil). Alternativement, renvoyer nil dans une fonction qui renvoie une erreur produirait également le résultat escompté.

Élaboration des comparaisons d'interface :

Les interfaces Go sont implémentées à l'aide d'un type et d'un valeur. Le type indique l'implémentation concrète de l'interface, tandis que la valeur représente les données réelles stockées. Une valeur d'interface est considérée comme nulle uniquement lorsque le type et la valeur ne sont pas définis (nil, nil).

Lors de la comparaison de deux valeurs d'interface pour l'égalité, les types et les valeurs doivent correspondre. Dans l'exemple fourni, l'instance nil de la structure Goof a une valeur nulle mais un type non nul, ce qui la rend non égale à l'instance d'erreur, qui a à la fois une valeur et un type nuls.

Ce concept s'étend au-delà des instances nulles. Par exemple, deux valeurs entières avec les mêmes données sous-jacentes (par exemple 3) mais des types différents (int et Bob) seront comparées comme inégales lorsqu'elles sont stockées dans des interfaces car les types diffèrent.

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