La programmation générique de Go introduit des contraintes de type, qui nous permettent d'appliquer certaines exigences sur les types utilisés dans les fonctions génériques et les structures de données . Toutefois, lorsqu'il s'agit d'utiliser des types génériques comme clés de mappage, certaines limitations surviennent.
Dans l'extrait de code fourni :
package main import "fmt" type List[X comparable] interface { isList() }
Nous définissons une liste chaînée générique avec une contrainte de type qui nécessite que les éléments de type X soient comparables. Cela garantit que les éléments de la liste peuvent être utilisés comme clés de carte.
Cependant, lorsque nous essayons d'utiliser une instance concrète de Cons[int] comme clé de carte et d'accéder à sa valeur (c'est-à-dire fmt.Println(id (x))), nous rencontrons une erreur de compilation : Cons[int] n'implémente pas de comparable.
En Go, la contrainte comparable prédéclarée garantit que les types prennent en charge les opérateurs d'égalité (== et !=) sans provoquer de panique au moment de l'exécution. Cette contrainte s'applique aux clés de mappage, ce qui signifie que seuls les types pouvant être comparés de manière fiable peuvent être utilisés comme clés.
La solution à ce problème consiste à utiliser la contrainte prédéclarée contrainte comparable :
type List[X comparable] interface { isList() }
Cette contrainte garantit que les clés de la carte seront strictement comparables, évitant ainsi les paniques potentielles lors de la clé comparaisons.
Bien qu'il puisse sembler intuitif d'utiliser une contrainte de type plus faible pour les clés de carte, la contrainte comparable prédéfinie est le choix approprié et efficace dans Go. Il garantit la fiabilité des comparaisons clés et évite les erreurs d'exécution potentielles associées aux types non comparables.
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!