我正在尝试找到一个可以在以下代码中使用的类似接口: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
虽然我知道这不符合每个人的口味。
- 1 回答
- 0 关注
- 106 浏览
添加回答
举报
0/150
提交
取消