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 不起作用(它在 > 标志上失败)。这里有内置界面还是我需要自己编写?


海绵宝宝撒
浏览 107回答 1
1回答

慕桂英546537

预先声明的类型comparable用于可与==和比较!=并且不包括大于或小于的事物。您可以从 go exp 存储库中使用constraints.Ordered,尽管您还必须更改return 0, ...为类似的内容var zero T; return zero, ...,因为例如字符串是可比较的但没有 0。它与您的问题没有直接关系,但作为一个小的代码审查评论, type 的值[]T是一个切片,而不是一个数组(数组具有固定大小),所以我可能会调用该函数SliceMax并尝试避免在当前命名的参数的名称中包含类型(即:切片或数组)typeArray(它不是类型数组——它既不是数组也不是它的元素类型),并选择一些通用的东西,ts虽然我知道这不符合每个人的口味。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go