web-dev-qa-db-fra.com

Aller à la comparaison des structures

La section Go Programming Language Specification sur Opérateurs de comparaison m'amène à penser qu'une structure contenant uniquement des champs comparables devrait être comparable:

Les valeurs des structures sont comparables si tous leurs champs sont comparables. Deux valeurs de structure sont égales si leurs champs non vides correspondants sont égaux.

En tant que tel, je m'attendrais à ce que le code suivant se compile puisque tous les champs de la structure "Student" sont comparables:

package main

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")
  }
}

Cependant, il ne parvient pas à compiler avec le message:

opération invalide: alice> = carol (opérateur> = non défini sur struct)

Qu'est-ce que je rate?

14
maerics

Vous avez raison, les structures sont comparables , mais pas ordonnées (- spéc ):

Les opérateurs d'égalité == et != s'applique aux opérandes comparables. Les opérateurs de commande <, <=, >, et >= s'applique aux opérandes qui sont ordonnés.

...

  • Les valeurs des structures sont comparables si tous leurs champs sont comparables. Deux valeurs de structure sont égales si leurs champs non vides correspondants sont égaux.

>= est un opérateur ordonné, pas comparable.

27
Tim Cooper

Vous devez définir le champ que vous comparez pour que le programme soit compilé.

if alice.Score >= carol.Score

Ensuite, il compile et imprime

Alice> = Carol

2
nosequeldeebee