Maison >développement back-end >Golang >Pourquoi la contrainte « comparable » de Go Generics ne peut-elle pas être utilisée avec les opérateurs de commande ?
Introduction
Lors de l'exploration des génériques Go, les développeurs peuvent rencontrer des difficultés lorsque vous tentez d'utiliser des opérateurs de commande tels que > au sein de fonctions qui acceptent des types satisfaisant la contrainte comparable. Cet article examine la justification de cette incompatibilité et explore des solutions potentielles.
Contrainte comparable
La contrainte comparable, telle que définie dans les spécifications du langage Go, s'applique aux types qui prend en charge les opérateurs d'égalité (== et !=). Cela inclut les types qui peuvent être utilisés comme clés de mappage, y compris les tableaux et les structures avec des champs comparables.
Opérateurs de commande
Alors que les spécifications du langage Go utilisent le terme « opérateurs de comparaison " pour englober à la fois les opérateurs d'égalité et d'ordre, les spécifications différencient clairement les types auxquels elles s'appliquent. Plus précisément, les opérateurs de commande tels que > et &Lt ; sont destinés aux opérandes qui sont « ordonnés ».
Incompatibilité avec Comparable
Malheureusement, la contrainte comparable n'implique pas qu'un type prend en charge les opérateurs de commande. Cela ressort clairement du message d'erreur rencontré : "Opération invalide : impossible de comparer t1 > t2 (opérateur > non défini sur T)."
Solutions
Go 1.21 et supérieur
Pour les versions Go 1.21 et supérieures, les développeurs peuvent tirer parti de cmp.Contrainte de type ordonnée introduite par la bibliothèque standard. Cette contrainte et ses fonctions associées, Less et Compare, facilitent les comparaisons sur les types ordonnés.
Go 1.18 à 1.20
Pour les versions de Go comprises entre 1.18 et 1.20, les contraintes La contrainte .Ordered du package golang.org/x/exp peut être utilisée pour des comparaisons impliquant une commande. opérateurs.
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!