Maison > développement back-end > Golang > Comment empêcher les types d'être utilisés comme clés de carte dans Go ?

Comment empêcher les types d'être utilisés comme clés de carte dans Go ?

Mary-Kate Olsen
Libérer: 2024-10-27 10:47:02
original
1079 Les gens l'ont consulté

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

Empêcher les types de fonctionner comme clés de carte

Dans certains scénarios, il peut être indésirable qu'un type spécifique soit utilisé comme clé de carte . Même s'ils possèdent un membre privé, ces types peuvent toujours être utilisés à ce titre. Cet article explore les méthodes permettant d'éviter de tels événements.

La condition fondamentale pour qu'un type serve de clé de mappage est que tous ses champs doivent être comparables. Une solution efficace consiste à inclure un champ non comparable dans la structure de type. Les types tels que les tranches, les cartes et les fonctions ne peuvent pas être comparés, donc l'ajout d'un champ de ce type exclut effectivement l'utilisation du type englobant. comme clé de carte.

Par exemple :

type MyType struct {
   A *A
   b b
   preventUseAsKey []int
}
Copier après la connexion

Une tentative d'utilisation de MyType comme clé de carte :

m := map[MyType]int{}
Copier après la connexion

entraînerait le temps de compilation suivant error :

invalid map key type MyType
Copier après la connexion

Cependant, il est important de noter que cette approche comporte un inconvénient potentiel : elle rend le type non comparable. Cela signifie des opérateurs de comparaison (par exemple, ==, ! =) ne peut plus être appliqué au type modifié, ce qui peut avoir un impact sur certains cas d'utilisation.

Pour préserver la comparabilité tout en limitant l'utilisation des clés de carte, un type wrapper peut être utilisé. Le type wrapper intègre le type d'origine mais ajoute un champ non comparable. Cela permet d'effectuer des opérations de comparaison sur le type intégré tout en interdisant l'utilisation du type wrapper 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!

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