首页 >后端开发 >Golang >如何在 Go 泛型中安全地使用顺序运算符(<、>、<=、>=)?

如何在 Go 泛型中安全地使用顺序运算符(<、>、<=、>=)?

DDD
DDD原创
2024-12-11 13:27:18244浏览

How Can I Safely Use Order Operators (<, >, <=, >=) 与 Go 泛型?
, =) 与 Go 泛型? " />

Go 泛型:具有可比较约束的排序运算符

在 Go 1.18 中,泛型允许定制约束以强制类型兼容性。但是,当尝试使用 '>' 时运算符与“可比较”约束,可能会出现错误。

“可比较”约束

“可比较”约束验证类型是否支持相等运算符(“==”和“!=”) ')。它包含符合映射键的类型,包括具有类似字段的数组和结构。值得注意的是,接口被排除在外,因为它们可能会导致运行时恐慌。比较。

有序与可比较

虽然 Go 规范在术语“比较运算符”下提到了顺序运算符,但它们区分了等价('==' 和 '!=')和排序运算符(“”、“=”)。 'ordered.'

Go 版本和解决方案

Go 1.21

  • 从标准库引入 'cmp.Ordered'。

走吧1.18 至 1.20

  • 利用实验性 'golang.org/x/exp' 包中的 'constraints.Ordered' 此约束支持顺序运算符,包括整数、浮点数和字符串。

示例:

import "golang.org/x/exp/constraints"

func getBiggerNumber[T constraints.Ordered](t1, t2 T) T {
    if t1 > t2 {
        return t1
    }
    return t2
}

通过选择适当的约束,您可以确保泛型函数中的类型兼容性和正确的比较行为。

以上是如何在 Go 泛型中安全地使用顺序运算符(<、>、<=、>=)?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn