Maison >développement back-end >Golang >Comment les contraintes de type de Go pour les clés de carte ont-elles évolué dans les versions 1.18, 1.19 et 1.20 ?

Comment les contraintes de type de Go pour les clés de carte ont-elles évolué dans les versions 1.18, 1.19 et 1.20 ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-22 15:49:14428parcourir

How Have Go's Type Constraints for Map Keys Evolved Across Versions 1.18, 1.19, and 1.20?

Go Generics : contraintes de type pour les clés de carte

Dans Go1.18, définition d'une liste chaînée générique pouvant être utilisée comme clé de carte échoue avec l'erreur "Cons[int] n'implémente pas de comparable." Cela est dû à l'exigence stricte pour les clés de mappage d'implémenter une interface comparable, ce qui garantit qu'elles prennent en charge les contrôles d'égalité (== et !=) sans paniquer.

Mise à jour Go 1.20

Dans Go 1.20, la contrainte comparable est désormais considérée comme le fourre-tout correct pour les clés de carte. Les types considérés comme comparables selon la spécification Go, même si les comparaisons peuvent paniquer, satisferont à la contrainte. Cela résout l'incohérence entre les types comparables selon les spécifications et ceux qui sont strictement comparables.

Considérations Go 1.18 et 1.19

Dans Go 1.18 et 1.19, le une contrainte comparable ne peut être instanciée que par des types strictement comparables qui prennent en charge == et != sans paniquer. Cela excluait les interfaces. Malgré la prise en charge des opérateurs d'égalité, les interfaces n'implémentaient pas de comparable car leurs types et valeurs dynamiques étaient comparés. Cela signifiait que la structure Cons fournie, qui contenait un champ de type List[X], ne pouvait pas implémenter de comparable.

Contrainte alternative

Pour résoudre cette limitation, une contrainte personnalisée intégrant des comparables pourrait être définie et implémentée par des structures map-key au lieu d'utiliser un champ d'interface. Par exemple :

type List interface {
    comparable
    isList() bool
}

En conclusion, la contrainte comparable est désormais la contrainte de type recommandée pour les clés de carte dans Go 1.20. Dans Go 1.18 et 1.19, les interfaces ne pouvaient pas être instanciées avec des interfaces comparables en raison de leur jeu de types infini. Des contraintes personnalisées intégrant des comparables pourraient être utilisées comme alternatives.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn