去结构比较

时间:2016-09-22 15:34:19

标签: go struct comparison

Comparison operators上的Go编程语言规范部分让我相信只包含可比较字段的结构应具有可比性:

  

如果所有字段都具有可比性,则结构值具有可比性。如果相应的非空白字段相等,则两个struct值相等。

因此,我希望编译以下代码,因为“Student”结构中的所有字段都具有可比性:

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&gt; = carol(运算符&gt; =未在struct上定义)

我错过了什么?

2 个答案:

答案 0 :(得分:25)

你是对的,结构可比,但不是有序spec):

  

等于运算符==!=适用于可比较的操作数。排序运算符<<=>>=适用于已排序的操作数。

     

...

     
      
  • 如果所有字段都具有可比性,则结构值可比较。如果相应的非空白字段相等,则两个struct值相等。
  •   

>=是一个有序的运算符,而不是类似的运算符。

答案 1 :(得分:2)

您必须定义要比较的字段才能使程序编译。

if alice.Score >= carol.Score

然后编译并打印

  

Alice&gt; = Carol