Maison  >  Article  >  développement back-end  >  Pourquoi les fonctions ne peuvent-elles pas être utilisées comme touches de carte dans Go ?

Pourquoi les fonctions ne peuvent-elles pas être utilisées comme touches de carte dans Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-31 18:27:29539parcourir

Why Can't Functions Be Used as Map Keys in Go?

Touches de fonction dans Maps

Cet article explore les limitations de l'utilisation de fonctions comme touches de carte dans le langage de programmation Go.

Le problème

Considérez le code Go hypothétique suivant :

type Action func(int)
func test(a int) { }
func test2(a int) { }

func main() {
  x := map[Action]bool{}
  x[test] = true
  x[test2] = false
}

Si vous essayez de compiler ce code, vous rencontrerez une erreur indiquant que « clé de carte non valide tapez Action."

La réponse

La spécification du langage Go interdit explicitement l'utilisation de fonctions, de cartes et de tranches comme clés de carte. Plus précisément, la spécification indique :

"Les opérateurs de comparaison == et != doivent être entièrement définis pour les opérandes du type de clé ; ainsi, le type de clé ne doit pas être une fonction, une carte ou une tranche."

Cette restriction est en place car les opérateurs de comparaison d'égalité (== et !=) doivent être bien définis pour le type de clé. Les fonctions, les cartes et les tranches ne sont pas des types de clés appropriés car leur comparaison d'égalité n'est pas entièrement définie.

Conclusion

Bien qu'il puisse être tentant d'utiliser des fonctions comme clés de carte , cela n'est pas autorisé dans Go en raison de la nécessité de comparaisons d'égalité bien définies. Par conséquent, vous devez utiliser d'autres types appropriés, tels que des chaînes, des entiers ou des structures, comme clés de mappage.

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!

Déclaration:
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