Maison >développement back-end >Golang >La contrainte « comparable » de Go Generics peut-elle être affaiblie pour les clés de carte dans les versions antérieures à 1.20 ?

La contrainte « comparable » de Go Generics peut-elle être affaiblie pour les clés de carte dans les versions antérieures à 1.20 ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-17 02:51:25662parcourir

Can Go Generics' `comparable` Constraint Be Weakened for Map Keys in Pre-1.20 Versions?

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

Problème :

Lors de l'utilisation d'une liste chaînée définie de manière générique comme map key dans Go 1.18, un message d'erreur apparaît indiquant que la liste chaînée n'implémente pas l'interface comparable. Existe-t-il une contrainte alternative plus faible adaptée à cet effet ?

Réponse :

Go 1.20 (février 2023)

Le la contrainte comparable est la contrainte fourre-tout appropriée pour les clés de carte. Dans Go 1.20, l'incohérence entre les types comparables aux spécifications et comparables est résolue, permettant à votre code de se compiler avec succès.

Go 1.18 et 1.19

La contrainte comparable dans Go 1.18 et 1.19 sont conçus pour des types strictement comparables qui prennent en charge == et != sans panique à l'exécution. Cela exclut les interfaces, même celles qui prennent en charge les opérateurs d'égalité. Étant donné que les interfaces ont un jeu de types infini, elles ne peuvent pas être instanciées de manière comparable.

Pour résoudre ce problème, envisagez d'utiliser une contrainte personnalisée qui intègre des comparables, telle que :

type List interface {
    comparable
    isList() bool
}

Implémentation structurelle de cette contrainte permettrait à la liste chaînée d'être utilisée comme clé de carte.

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