2016-09-22 31 views
7

sadece karşılaştırılabilir alanlarını içeren bir yapı karşılaştırılabilir olması gerektiğine inanıyoruz için: tüm alanları karşılaştırılabilir iseGolang yapı karşılaştırma

Struct değerleri benzerdir. Boş olmayan alanların eşit olması durumunda iki yapı değeri eşittir.

Bunun gibi, ben aşağıdaki kod "Öğrenci" yapı içinde tüm alanları beri derlemek için beklediğiniz karşılaştırılabilir şunlardır:

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

, mesajla bu fails to compile:

geçersiz işlem: alice> = carol (operatör> = yapı tanımlanmamış)

Neyi özlüyorum?

cevap

14

Sen yapılar karşılaştırılabilir fakat (spec) sipariş değil , doğru:

eşitlik operatörleri == ve != karşılaştırılabilir işlenen uygulanır. Sipariş operatörleri <, <=, > ve >=, sipariş edilen işlenenler için geçerlidir. tüm alanları karşılaştırılabilir ise

...

  • Struct değerleri karşılaştırılabilir bulunmaktadır. Boş olmayan alanların eşit olması durumunda iki yapı değeri eşittir.

>= sıralı bir operatör, bir karşılaştırılabilir bir tanesidir.

1

Programın derlenmesini sağlamak için karşılaştırmakta olduğunuz alanı tanımlamanız gerekir.

if alice.Score >= carol.Score 

Sonra derler ve baskılar

Alice> = Carol