为了账号安全,请及时绑定邮箱和手机立即绑定

golang 中是否有用于使用泛型实现 > 的接口/类型?

golang 中是否有用于使用泛型实现 > 的接口/类型?

Go
海绵宝宝撒 2023-02-21 16:52:23
我正在尝试找到一个可以在以下代码中使用的类似接口:func SliceMax[T comparable](ts []T) (T, error) {    if len(ts) == 0 {        return 0, errors.New("cannot get max from empty slice")    }    m := ts[0]    for _, e := range ts {        if e > m {            m = e        }    }    return m, nil}但是 comparable 不起作用(它在 > 标志上失败)。这里有内置界面还是我需要自己编写?
查看完整描述

1 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

预先声明的类型comparable用于可与==和比较!=并且不包括大于或小于的事物。您可以从 go exp 存储库中使用constraints.Ordered,尽管您还必须更改return 0, ...为类似的内容var zero T; return zero, ...,因为例如字符串是可比较的但没有 0。

它与您的问题没有直接关系,但作为一个小的代码审查评论, type 的值[]T是一个切片,而不是一个数组(数组具有固定大小),所以我可能会调用该函数SliceMax并尝试避免在当前命名的参数的名称中包含类型(即:切片或数组)typeArray(它不是类型数组——它既不是数组也不是它的元素类型),并选择一些通用的东西,ts虽然我知道这不符合每个人的口味。


查看完整回答
反对 回复 2023-02-21
  • 1 回答
  • 0 关注
  • 106 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信