一尘不染

Go结构比较

go

比较运算符的
Go编程语言规范”部分使我相信,仅包含可比较字段的结构应具有可比性:

如果结构的所有字段都是可比较的,则它们的值是可比较的。如果两个结构值对应的非空白字段相等,则它们相等。

这样,由于“ 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")
  }
}

但是,它无法使用以下消息进行编译

无效的操作:alice> = carol(运算符> =未在结构上定义)

我想念什么?


阅读 220

收藏
2020-07-02

共1个答案

一尘不染

您是正确的,结构是 可比较的 ,但没有 排序
规范):

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

  • 如果结构的所有字段都是可 比较的, 则其值是 比较的。如果两个结构值对应的非空白字段相等,则它们相等。

>= 是有序运算符,而不是可比运算符。

2020-07-02