Heim > Backend-Entwicklung > Golang > Warum schlägt der Strukturvergleich in Go trotz vergleichbarer Felder fehl?

Warum schlägt der Strukturvergleich in Go trotz vergleichbarer Felder fehl?

Susan Sarandon
Freigeben: 2024-11-08 10:03:02
Original
1008 Leute haben es durchsucht

Why Does Struct Comparison Fail in Go Despite Comparable Fields?

Go-Strukturvergleich: Warum der erwartete Vergleich fehlschlägt

Obwohl die Go-Spezifikation zur Strukturvergleichbarkeit eingehalten wird, bei der alle Felder einer Struktur vergleichbar sind, schlägt der folgende Code fehl kompilieren:

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")
  }
}
Nach dem Login kopieren

Die fehlende Unterscheidung: Vergleichbar vs. Geordnet

Der Schlüssel zum Verständnis dieses Versagens liegt in der Unterscheidung zwischen Vergleichbarkeit und Bestellbarkeit.

  • Vergleichbar: Strukturen sind vergleichbar, wenn alle ihre Felder vergleichbar sind.
  • Geordnet: Strukturen sind geordnet, wenn alle ihre Felder geordnet sind, was Operatoren wie <, < =, > und >= müssen verwendet werden.

    Während die Felder der Student-Struktur tatsächlich vergleichbar sind, ist der >=-Operator ein Ordnungsoperator und kein vergleichbarer. Diese Unterscheidung wird in der Go-Spezifikation ausdrücklich erwähnt, wo Strukturwerte als „vergleichbar, wenn alle ihre Felder vergleichbar sind“, aber nur als „gleich, wenn ihre entsprechenden nicht leeren Felder gleich sind“ definiert sind. Die Reihenfolge wird in diesem Zusammenhang nicht erwähnt.

    Schlussfolgerung

    Das Missverständnis, das zu diesem Fehler bei der Kompilierung führte, rührt von der Annahme her, dass Vergleichbarkeit Ordnungsfähigkeit impliziert. In Go sind dies unterschiedliche Konzepte. Während Strukturen auf Gleichheit verglichen werden können, können sie nicht standardmäßig sortiert werden, es sei denn, ihre Felder bieten eine bestimmte Reihenfolgebeziehung.

    Das obige ist der detaillierte Inhalt vonWarum schlägt der Strukturvergleich in Go trotz vergleichbarer Felder fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage