"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment pouvons-nous contraindre efficacement les types indexables dans les génériques Go 1.18 ?

Comment pouvons-nous contraindre efficacement les types indexables dans les génériques Go 1.18 ?

Publié le 2024-11-19
Parcourir:296

How Can We Effectively Constrain Indexable Types in Go 1.18 Generics?

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 , pensez à utiliser la contrainte suivante avec une union :

type Indexable interface {
    ~[]byte | ~string
}

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 à son utilisation avec d'autres types indexables, tels que les cartes et les tableaux. :

  • Maps : L'union doit contenir uniquement des types de cartes avec des types de clé et d'éléments identiques. Cette restriction le rend peu pratique pour les algorithmes génériques qui doivent gérer des cartes avec des clés et des valeurs différentes.
  • Tableaux : La longueur d'un tableau fait partie de son type, une union devra donc spécifier toutes les longueurs possibles. Cela peut être fastidieux et sujet à des erreurs hors limites.

Approche alternative

En raison de ces limitations, la seule union pratique qui prend en charge l'indexation est []octet | chaîne. Cette union autorise les opérations d'indexation mais ne prend pas en charge les opérations sur les plages car elle ne dispose pas d'un type de base.

Exemple d'utilisation

L'exemple suivant montre comment utiliser la contrainte Indexable :

func GetAt[T Indexable](v T, i int) byte {
    return v[i]
}

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 pour contraindre des types à des types indexables à l'aide d'une union, les limitations 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.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3