2016-09-22 179 views
7

Comparison operators圍棋編程語言規範部分使我相信只含可比字段的結構應該是可比的:Golang結構比較

結構值是可比較的,如果所有的領域都具有可比性。如果其相應的非空白字段相等,則兩個結構值相等。

因此,我希望,因爲所有的「學生」結構中的字段將下面的代碼編譯具有可比性:

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

然而,fails to compile與消息:

無效操作:alice> = carol(操作符> =未在結構中定義)

我錯過了什麼?

回答

14

你是正確的,結構是可比,但不有序spec):

等式運算==!=適用於具有可比性的操作數。訂購運算符<,<=,>>=適用於有序的操作數。

...

  • 結構值可比如果所有的領域都具有可比性。如果其相應的非空白字段相等,則兩個結構值相等。

>=是一個有序的操作,而不是同級。

1

您必須定義您正在比較的字段才能編譯程序。

if alice.Score >= carol.Score 

然後它編譯,並打印

愛麗絲> =卡羅爾