=` 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!