简介
在探索 Go 泛型时,开发者可能会遇到困难当尝试使用诸如 > 之类的订单运算符时在接受满足可比较约束的类型的函数内。本文深入探讨了这种不兼容性背后的原理,并探讨了潜在的解决方案。
可比较约束
Go 语言规范中定义的可比较约束适用于以下类型:支持相等运算符(== 和 !=)。这包括可用作映射键的类型,包括具有可比较字段的数组和结构体。
排序运算符
虽然 Go 语言规范使用术语“比较运算符”为了包含相等和排序运算符,规范明确区分了它们适用的类型。具体来说,排序运算符如>且
与 Comparable 不兼容
不幸的是,可比较约束并不意味着类型支持排序运算符。从遇到的错误消息可以明显看出:“无效操作:无法比较 t1 > t2(运算符 > 未在 T 上定义)。”
解决方案
Go 1.21 及以上
Go 版本1.21 及更高版本,开发人员可以利用标准库引入的 cmp.Ordered 类型约束。此约束及其关联函数 Less 和 Compare 有助于有序类型的比较。
Go 1.18 到 1.20
对于 1.18 和 1.20 之间的 Go 版本,约束.golang.org/x/exp 包中的有序约束可用于涉及排序的比较运营商。
以上是为什么 Go 泛型的'可比较”约束不能与排序运算符一起使用?的详细内容。更多信息请关注PHP中文网其他相关文章!