Maison  >  Article  >  développement back-end  >  Comment empêcher l’utilisation de types personnalisés comme clés de carte dans Go ?

Comment empêcher l’utilisation de types personnalisés comme clés de carte dans Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-26 07:04:02366parcourir

How to Prevent Custom Types from Being Used as Map Keys in Go?

Restriction des touches de carte pour les types personnalisés

Certains types sont intrinsèquement inadaptés en tant que clés de carte, tels que les cartes, les tranches et les fonctions. Cependant, certains développeurs peuvent souhaiter empêcher explicitement qu'un type personnalisé spécifique soit utilisé comme clé de mappage.

Au départ, s'appuyer sur des membres privés au sein du type peut sembler une solution, mais cette approche est inefficace. Pour résoudre ce problème, nous avons besoin d'une solution plus fondamentale qui adhère à la spécification du langage.

La clé pour interdire l'utilisation d'un type comme clé de mappage réside dans la violation des exigences relatives aux opérateurs de comparaison. Selon la spécification, les types de clés de mappage doivent avoir des opérateurs de comparaison entièrement définis == et !=. Par conséquent, en incluant un champ avec un type non comparable, nous pouvons effectivement rendre le type entier non comparable.

Par exemple, considérons le type suivant :

type MyType struct {
    A *A
    b b
    notComparable []int
}

Ajout du champ notComparable avec un type de tranche rend l'intégralité de MyType non comparable, empêchant son utilisation comme clé de mappage. En effet, les tranches ne peuvent pas être comparées.

m := map[MyType]int{} // Compile-time error: invalid map key type MyType

Il convient de noter que l'introduction d'un champ non comparable peut avoir d'autres implications. Par exemple, il sera impossible de comparer des valeurs du type à l'aide d'opérateurs comme == et !=. Cependant, en concevant soigneusement le type, il est possible de conserver la comparabilité pour des champs spécifiques tout en empêchant que le type soit utilisé comme clé 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