Maison  >  Article  >  développement back-end  >  Pourquoi ne puis-je pas comparer les Go Structs avec `>=` ou `

Pourquoi ne puis-je pas comparer les Go Structs avec `>=` ou `

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-09 08:36:02228parcourir

Why Can't I Compare Go Structs with `>=` ou `=` ou `" />

Comparaison Go Struct : Incompréhension entre comparable et ordonné

En Go, les structures sont considérées comme comparables par défaut si tous leurs champs sont comparables. Cela signifie qu'une structure peut être affectée à une variable du même type ou comparée à une autre structure du même type à l'aide de l'opérateur d'égalité (== ou !=).

Cependant, une idée fausse courante surgit lorsque l'on tente de utilisez des opérateurs ordonnés tels que >= ou <= sur les structures. Bien que les structures soient comparables, elles ne sont pas intrinsèquement ordonnées. Cette distinction est cruciale à comprendre pour une programmation Go efficace.

Dans l'exemple fourni :

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

La compilation du code échoue car >= est un opérateur ordonné. Le compilateur détecte que Student n'est pas explicitement défini comme un type ordonné, ce qui est nécessaire pour prendre en charge les comparaisons ordonnées. Les valeurs de structure peuvent être comparées pour l'égalité en utilisant == ou !=, mais leur relation d'ordre (c'est-à-dire <, >, <=, >=) n'est pas définie.

La spécification du langage Go indique clairement :

"Les opérateurs de commande <, <=, > et >= s'appliquent aux opérandes ordonnés. [...] Struct les valeurs 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, les structures ne sont pas intrinsèquement ordonnées et les opérateurs ordonnés comme >= ne sont pas pris en charge. sur les valeurs de structure à moins qu'elles ne soient explicitement déclarées comme types ordonnés. Pour permettre la comparaison ordonnée, les types personnalisés doivent implémenter l'interface sort.Interface, qui nécessite de définir des méthodes spécifiques pour trier et comparer les instances du type.

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