Maison > développement back-end > Golang > Pourquoi ne puis-je pas comparer les Go Structs avec `>=` lorsque leurs champs sont comparables ?

Pourquoi ne puis-je pas comparer les Go Structs avec `>=` lorsque leurs champs sont comparables ?

Patricia Arquette
Libérer: 2024-11-10 19:58:03
original
191 Les gens l'ont consulté

Why Can't I Compare Go Structs with `>=` Quand leurs domaines sont-ils comparables ? 
=` 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")
  }
}
Copier après la connexion

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!

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