登录
首页 >  Golang >  Go问答

在Golang中,是否有一种使用泛型来实现 > 接口/类型的方法?

来源:stackoverflow

时间:2024-02-08 15:27:20 341浏览 收藏

从现在开始,努力学习吧!本文《在Golang中,是否有一种使用泛型来实现 > 接口/类型的方法?》主要讲解了等等相关知识点,我会在golang学习网中持续更新相关的系列文章,欢迎大家关注并积极留言建议。下面就先一起来看一下本篇正文内容吧,希望能帮到你!

问题内容

我正在尝试找到一个类似的接口,我可以在以下代码中使用它:

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 用于与 ==!= 进行比较的内容,并且不包括大于或小于。您可以使用 go exp 存储库中的 constraints.Ordered,尽管您还必须将 return 0, ... 更改为 var 零 T;返回零,...,因为例如字符串是可比较的,但没有 0。

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

好了,本文到此结束,带大家了解了《在Golang中,是否有一种使用泛型来实现 > 接口/类型的方法?》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>