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 :
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!