首页 > 后端开发 > Golang > 正文

当 Go 结构体的字段可比较时,为什么我不能将它们与 `>=` 进行比较?

Patricia Arquette
发布: 2024-11-10 19:58:03
原创
128 人浏览过

Why Can't I Compare Go Structs with `>=` 当它们的字段具有可比性时? 
=` 当他们的领域具有可比性时? " />

Go 结构体比较:意外错误

Go 编程语言规范规定,只有可比较字段的结构体应该具有可比较性。但是,以下代码无法编译:

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 (运算符 >= 未在结构上定义)

此错误与规范相矛盾,因为如果结构的字段是可比较的,则结构应该是可比较的。

解释:

虽然可以比较 Student 结构体的字段(使用 == 和 !=),但它们不能排序运算符(、>=)只能用于有序操作数,例如整数或字符串。

Go 编程语言规范明确规定了结构体可以比较但不排序:

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

...

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

因此,您不能使用 >= 来比较 Student 结构体,即使它们的字段是可比较的。

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

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