Maison > développement back-end > Golang > 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
Libérer: 2024-11-08 10:03:02
original
1008 Les gens l'ont consulté

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")
  }
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal