首页 > 后端开发 > Golang > 为什么我不能将 Go 结构体与 `>=` 或 ` 进行比较

为什么我不能将 Go 结构体与 `>=` 或 ` 进行比较

Mary-Kate Olsen
发布: 2024-11-09 08:36:02
原创
283 人浏览过

Why Can't I Compare Go Structs with `>=` 或 `=` 或 `" />

Go 结构比较:可比较和有序之间的误解

在 Go 中,如果结构的所有字段都可比较,则默认情况下将结构视为可比较。这意味着可以将一个结构体分配给相同类型的变量,或者使用相等运算符(== 或 !=)与另一个相同类型的结构体进行比较。

但是,当尝试在结构上使用有序运算符,例如 >= 或

在提供的示例中:

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")
  }
}
登录后复制

代码无法编译,因为 >= 是有序运算符。编译器检测到 Student 未显式定义为有序类型,这是它支持有序比较所必需的。可以使用 == 或 != 比较结构体值是否相等,但它们的顺序关系(即 、=)未定义。

Go 语言规范明确指出:

“排序运算符 和 >= 适用于已排序的操作数。[...]如果所有字段都可比较,则结构体值是可比较的。如果相应的非空白字段相等,则两个结构体值相等。”

因此,结构体本质上不是有序的,而像 >= 这样的有序运算符则不是。结构值受支持,除非它们被显式声明为有序类型。要启用有序比较,自定义类型必须实现 sort.Interface 接口,这需要定义用于排序和比较类型实例的特定方法。

以上是为什么我不能将 Go 结构体与 `>=` 或 ` 进行比较的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板