Heim  >  Artikel  >  Backend-Entwicklung  >  Warum kann ich Go-Strukturen nicht mit „>=' vergleichen, wenn ihre Felder vergleichbar sind?

Warum kann ich Go-Strukturen nicht mit „>=' vergleichen, wenn ihre Felder vergleichbar sind?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-10 19:58:03170Durchsuche

Why Can't I Compare Go Structs with `>=` Wenn ihre Fachgebiete vergleichbar sind? 
=` Wann sind ihre Felder vergleichbar? " />

Go-Strukturvergleich: Unerwarteter Fehler

Die Go-Programmiersprachenspezifikation besagt, dass Strukturen mit nur vergleichbaren Feldern vergleichbar sein sollten. Der folgende Code schlägt jedoch fehl kompilieren:

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

Die Fehlermeldung lautet:

ungültige Operation: alice >= carol (Operator >= nicht auf Struktur definiert)

Dieser Fehler widerspricht der Spezifikation, da Strukturen vergleichbar sein sollten, wenn ihre Felder vergleichbar sind.

Erklärung:

Während die Felder der Student-Struktur verglichen werden können (mithilfe von == und !=), sind sie nicht geordnete Operatoren (<, <=, >, >=) kann nur für geordnete Operanden wie Ganzzahlen oder Zeichenfolgen verwendet werden.

In der Go Programming Language Specification heißt es eindeutig, dass Strukturen vergleichbar, aber nicht geordnet sind:

Die Gleichheitsoperatoren == und != gelten für vergleichbare Operanden. Die Ordnungsoperatoren <, <=, > und >= gilt für geordnete Operanden.

...

  • Strukturwerte sind vergleichbar, wenn alle ihre Felder vergleichbar sind. Zwei Strukturwerte sind gleich, wenn ihre entsprechenden nicht leeren Felder gleich sind.

Daher können Sie >= nicht zum Vergleichen von Student-Strukturen verwenden, auch wenn ihre Felder vergleichbar sind.

Das obige ist der detaillierte Inhalt vonWarum kann ich Go-Strukturen nicht mit „>=' vergleichen, wenn ihre Felder vergleichbar sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn