=` 当他们的领域具有可比性时? " />
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中文网其他相关文章!