Bien qu'il soit conforme à la spécification Go sur la comparabilité des structures, où tous les champs d'une structure sont comparables, le code suivant échoue à compiler :
type Student struct { Name string Score uint8 } func main() { alice := Student{"Alice", 98} carol := Student{"Carol", 72} if alice >= carol { // Error: "invalid operation" println("Alice >= Carol") } else { println("Alice < Carol") } }
La clé pour comprendre cet échec réside dans la distinction entre comparabilité et ordonnabilité.
Bien que les champs de la structure Student soient effectivement comparables, l'opérateur >= est un opérateur de tri, pas comparable. . Cette distinction est explicitement mentionnée dans la spécification Go, où les valeurs de structure sont définies comme « comparables si tous leurs champs sont comparables », mais uniquement « égales si leurs champs non vides correspondants sont égaux ». L'ordre n'est pas mentionné dans ce contexte.
L'idée fausse qui a conduit à cette erreur de compilation vient de l'hypothèse que la comparabilité implique l'ordre. En Go, ce sont des concepts distincts. Bien que les structures puissent être comparées pour l'égalité, elles ne peuvent pas être ordonnées par défaut à moins que leurs champs ne fournissent une relation de classement spécifique.
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!