比较运算符的 “ 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(运算符> =未在结构上定义)
我想念什么?
您是正确的,结构是 可比较的 ,但没有 排序 (规范):
等于运算符==和!=适用于可比较的操作数。排序运营商<,<=,>和>=适用于排序操作数。 … 如果结构的所有字段都是可 比较的, 则其值是 可 比较的。如果两个结构值对应的非空白字段相等,则它们相等。
等于运算符==和!=适用于可比较的操作数。排序运营商<,<=,>和>=适用于排序操作数。
==
!=
<
<=
>
>=
…
>= 是有序运算符,而不是可比运算符。