Contraintes d'indexation dans les génériques Go 1.18
Avec l'introduction des génériques dans Go 1.18, les développeurs ont la possibilité d'implémenter des algorithmes qui fonctionnent avec des genres. Une exigence courante consiste à utiliser des types prenant en charge l'indexation, tels que des tableaux, des tranches, des cartes et des chaînes.
Contrainte indexable
Pour restreindre un paramètre de type aux types indexables , envisagez d'utiliser la contrainte suivante avec une union :
<code class="go">type Indexable interface { ~[]byte | ~string }</code>
Limitations de la contrainte indexable
Bien que la contrainte ci-dessus fonctionne pour l'indexation d'octets et de chaînes, il existe des limites à en l'utilisant avec d'autres types indexables, tels que des cartes et des tableaux :
Approche alternative
En raison de ces limitations, la seule union pratique qui prend en charge l'indexation est []octet | chaîne. Cette union permet les opérations d'indexation mais ne prend pas en charge les opérations sur les plages car il lui manque un type de base.
Exemple d'utilisation
L'exemple suivant montre comment utiliser la contrainte Indexable :
<code class="go">func GetAt[T Indexable](v T, i int) byte { return v[i] }</code>
Cette fonction prend une valeur indexable et un index et renvoie l'octet à l'index spécifié.
Conclusion
While Go 1.18 fournit un moyen de contraindre les types à des types indexables à l'aide d'une union, les limites de cette contrainte signifient qu'elle n'est pratique que pour un ensemble limité de cas d'utilisation, à savoir l'indexation d'octets et de chaînes.
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!