Avec l'introduction des génériques dans Go 1.18, les développeurs peuvent définir des types avec des contraintes de type, garantissant que seuls des types spécifiques sont autorisés. Cette flexibilité devient cruciale lors de la mise en œuvre d'algorithmes qui s'appuient sur des types prenant en charge les indices.
Pouvez-vous contraindre les types avec une méthode d'index ?
Pour contraindre les types avec des indices, on pourrait envisager en utilisant la propriété d'indexabilité. Cependant, la seule contrainte significative que vous pouvez créer est de type Indexable interface { ~[]byte | ~chaîne }. Cette contrainte limite les types aux tranches d'octets et aux chaînes.
Pourquoi une contrainte d'union est-elle limitée ?
Les opérations autorisées sur les types contraints par l'union sont limitées à celles prises en charge par tous les types dans l’ensemble de contraintes. Pour prendre en charge l'indexation, les types de l'union doivent avoir des types de clé et d'élément identiques.
De plus, les types de carte dans l'union doivent avoir des types de clé identiques. Et pour les tableaux, leur longueur fait partie du type, ce qui rend peu pratique la définition d'une union pour toutes les longueurs possibles.
Implémentation pratique pour l'indexation
Par conséquent, le seul l'union qui satisfait à l'exigence d'indexation est []byte | chaîne. Puisque byte est un alias pour uint8, vous pouvez également utiliser []uint8 avec cette contrainte.
Limitations de la contrainte d'union pour l'indexation
Alors que la contrainte d'union []byte | la chaîne prend en charge l'indexation, elle ne prend pas en charge la plage. En effet, l'union n'a pas de type de base.
En conclusion, la contrainte des types à ceux qui prennent en charge les index dans les génériques Go est limitée au type de contrainte spécifique Indexable interface { ~[]byte | ~chaîne }. En dehors de cela, il n'existe pas d'autre moyen de définir une contrainte qui englobe tous les types indexables.
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!