=` Quand leurs champs sont comparables ? " />
Comparaison Go Struct : erreur inattendue
La spécification du langage de programmation Go indique que les structures avec uniquement des champs comparables doivent être comparables. Cependant, le code suivant ne parvient pas à compile :
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") } }
Le message d'erreur est :
opération invalide : alice >= carol (opérateur >= non défini sur la structure)Cette erreur contredit le spécification, car les structures doivent être comparables si leurs champs le sont.
Explication :
Alors que les champs de la structure Student peuvent être comparés (en utilisant == et !=) , ils ne sont pas ordonnés. Les opérateurs de commande (<, <=, >, >=) ne peuvent être utilisés que sur des opérandes ordonnés, tels que des entiers ou des chaînes.
Spécification du langage de programmation Go. indique clairement que les structures sont comparables mais non ordonnées :
Les opérateurs d'égalité == et != s'appliquent aux opérandes comparables. Les opérateurs de classement <, <=, > et > = s'applique aux opérandes ordonnés.
...
- Les valeurs de structure sont comparables si tous leurs champs sont comparables. Deux valeurs de structure sont égales si leurs champs non vides correspondants sont égaux.
Par conséquent, vous ne pouvez pas utiliser >= pour comparer les structures Student, même si leurs champs sont 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!