Maison  >  Article  >  développement back-end  >  Pourquoi la comparaison de structures échoue-t-elle malgré des champs comparables ?

Pourquoi la comparaison de structures échoue-t-elle malgré des champs comparables ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-08 10:03:02904parcourir

Why Does Struct Comparison Fail in Go Despite Comparable Fields?

Comparaison Go Struct : pourquoi la comparaison attendue échoue

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 distinction manquante : Comparable vs. Ordonné

La clé pour comprendre cet échec réside dans la distinction entre comparabilité et ordonnabilité.

  • Comparable : les structures sont comparables si tous leurs champs sont comparables.
  • Ordonné : les structures sont ordonnées si tous leurs champs sont ordonnés, ce qui permet des opérateurs comme <, <=, > et >= à utiliser.

    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.

    Conclusion

    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!

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