Outils développeurActualité

Collections Go : définir l’égalité des clés

Sur cette page
  1. Proposition et fonction déjà livrée
  2. Une clé insensible à la casse exige deux choix cohérents
  3. Choisir selon l’opération recherchée

Une API d’ensemble devient utile lorsque « le même élément » a un sens précis. Les propositions Go exposent ce choix au lieu d’imposer partout l’égalité intégrée.

Exemple d’égalité ASCII : ALICE et alice deviennent les mêmes octets avant hachage et comparaison cohérents. Valeurs égales : hachages identiques avec la même graine. L’inverse ne prouve pas l’égalité.
Exemple d’égalité ASCII : ALICE et alice deviennent les mêmes octets avant hachage et comparaison cohérents. Valeurs égales : hachages identiques avec la même graine. L’inverse ne prouve pas l’égalité. Graphique : PeopleAreGeek. Source des données.
Agrandir l’image

Proposition et fonction déjà livrée

Le dossier ouvert #80590 vise Go1.28 : ensembles, hachage personnalisé, maps ordonnées et tas générique. Il ne garantit pas la livraison de chaque paquet. L’ensemble représenté par une map conserve les opérations intégrées ; l’insertion du brouillon s’appelle Insert, pas Add.

Go 1.27 fournit déjà maphash.Hasher. Sa documentation associe hachage et égalité : deux valeurs jugées égales doivent être hachées de façon cohérente avec une même graine.

Une clé insensible à la casse exige deux choix cohérents

Imaginons une application limitée aux identifiants ASCII, traitant volontairement « ALICE » et « alice » comme égaux. Si l’égalité ignore la casse mais que le hachage utilise les octets initiaux, les deux clés peuvent aboutir dans des compartiments différents. Une recherche risque alors de manquer l’entrée attendue.

Notre schéma normalise les deux entrées vers les mêmes octets canoniques avant comparaison et hachage. C’est un exemple conceptuel, pas du code de normalisation Unicode prêt à produire. Une application internationale doit définir ses règles de normalisation et d’équivalence au lieu de généraliser ce cas ASCII.

Une collision est différente : deux valeurs inégales peuvent partager un hachage, donc la comparaison doit encore les distinguer. Le hachage aide à indexer ; il ne prouve pas une identité.

Choisir selon l’opération recherchée

Pour vérifier une appartenance avec des clés comparables, un ensemble fondé sur une map peut suffire. Pour des requêtes par intervalle ou un parcours ordonné, examinez une structure ordonnée. Pour une équivalence personnalisée ou des clés non comparables, évaluez les propositions à hachage et le coût du calcul lui-même.

Attendez un état clair des API individuelles et de la chaîne d’outils avant une migration de production. La préparation utile consiste à inventorier opérations et sémantique d’égalité. Renommer une bibliothèque locale pour suivre un brouillon mouvant ne démontre pas un gain de performance ou d’entretien.

Revue du 8 septembre : proposition Go1.28 distinguée de Hasher livré en 1.27 ; terminologie d’insertion corrigée et cohérence égalité/hachage expliquée.