2016-09-22 23 views
7

Comparison operatorsに行くプログラミング言語仕様のセクションは同等のフィールドを含む構造体が同等であることを信じるように私をリード:すべてのフィールドが同等である場合Golang構造体の比較

構造体の値は同等です。対応する非空白フィールドが等しい場合、2つの構造体の値は等しくなります。このように

「学生」構造体のフィールドのすべてが同等であるため、私は、次のコードをコンパイルする期待:

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)を注文していない:

等価演算子==!=は同等であるオペランドに適用されます。注文オペレータ<,<=>、および>=は、注文されるオペランドに適用されます。すべてのフィールドが同等である場合

...

  • 構造体の値は、同等のです。対応する非空白フィールドが等しい場合、2つの構造体の値は等しくなります。

>=注文したオペレータではなく、同等のものです。

1

コンパイルするプログラムを取得するために比較するフィールドを定義する必要があります。

if alice.Score >= carol.Score 

それがコンパイルされ、プリント

アリス> =キャロル

関連する問題