Contraindre les types aux types indexables dans les génériques Go
Dans Go 1.18, l'introduction des génériques a ouvert de nouvelles possibilités en matière de sécurité des types. Un scénario couramment rencontré est la nécessité de limiter les types autorisés à ceux qui prennent en charge l'indexation, tels que les tableaux, les tranches, les cartes et les chaînes.
L'indexabilité est-elle une contrainte ?
Bien que l'indexation soit une fonctionnalité souhaitable pour de nombreux types, ce n'est pas en soi une contrainte qui peut être directement spécifiée. Les contraintes dans les génériques Go sont spécifiées à l'aide d'ensembles de types, qui définissent les types autorisés.
Contrainte d'indexation significative
La seule contrainte d'indexation significative utilisant un ensemble de types d'union est Indexable, qui restreint les types autorisés à []byte ou à une chaîne. Cette contrainte permet de définir des fonctions génériques qui acceptent les deux types et effectuent des opérations d'indexation.
Limitations des contraintes d'indexation
D'autres types indexables potentiels, tels que les tableaux et les cartes, ne peut pas être combiné de manière significative dans un ensemble de types d’union. Les opérations autorisées sur les types syndiqués sont uniquement celles prises en charge par tous les types de membres, et les contraintes nécessitent des types de clé et d'éléments égaux pour l'indexation.
Mise en œuvre pratique
En conséquence , la seule contrainte d'indexation pratique est Indexable pour []byte et string. Cela permet des fonctions génériques qui fonctionnent sur les deux types, comme la fonction GetAt fournie dans la réponse, qui renvoie l'octet à un index spécifié.
Notes supplémentaires
Il est important de noter que la contrainte Indexable ne prend pas en charge les opérations de plage car il lui manque un type de base. Cependant, les types []byte et string ont tous deux une capacité de plage et peuvent être utilisés lorsque des opérations de plage sont requises.
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!