La section Go Programming Language Specification sur Opérateurs de comparaison m'amène à penser qu'une structure contenant uniquement des champs comparables devrait être comparable:
Les valeurs des structures sont comparables si tous leurs champs sont comparables. Deux valeurs de structure sont égales si leurs champs non vides correspondants sont égaux.
En tant que tel, je m'attendrais à ce que le code suivant se compile puisque tous les champs de la structure "Student" sont comparables:
package main
type Student struct {
Name string // "String values are comparable and ordered, lexically byte-wise."
Score uint8 // "Integer values are comparable and ordered, in the usual way."
}
func main() {
alice := Student{"Alice", 98}
carol := Student{"Carol", 72}
if alice >= carol {
println("Alice >= Carol")
} else {
println("Alice < Carol")
}
}
Cependant, il ne parvient pas à compiler avec le message:
opération invalide: alice> = carol (opérateur> = non défini sur struct)
Qu'est-ce que je rate?
Vous avez raison, les structures sont comparables , mais pas ordonnées (- spéc ):
Les opérateurs d'égalité
==
et!=
s'applique aux opérandes comparables. Les opérateurs de commande<
,<=
,>
, et>=
s'applique aux opérandes qui sont ordonnés....
- Les valeurs des structures sont comparables si tous leurs champs sont comparables. Deux valeurs de structure sont égales si leurs champs non vides correspondants sont égaux.
>=
est un opérateur ordonné, pas comparable.
Vous devez définir le champ que vous comparez pour que le programme soit compilé.
if alice.Score >= carol.Score
Ensuite, il compile et imprime
Alice> = Carol