问题:
当使用泛型定义的链表作为Go 1.18中的map key,出现错误信息,提示该链表没有实现可比较的接口。是否有适合此目的的较弱替代约束?
答案:
Go 1.20(2023 年 2 月)
The可比较约束是映射键的适当的包罗万象的约束。在 Go 1.20 中,解决了规范可比较和可比较类型之间的不一致问题,使您的代码能够成功编译。
Go 1.18 和 1.19
Go 中的可比较约束1.18 和 1.19 专为严格可比较的类型而设计,支持 == 和 != 而不会出现运行时恐慌。这不包括接口,即使是那些支持相等运算符的接口。由于接口具有无限类型集,因此它们无法实例化为可比较的。
要解决此问题,请考虑使用嵌入可比较的自定义约束,例如:
type List interface { comparable isList() bool }
结构上实现此约束将允许链接列表用作地图键。
以上是1.20 之前的版本中,Go 泛型对 Map Key 的'comparable”约束是否可以减弱?的详细内容。更多信息请关注PHP中文网其他相关文章!