登录
首页 >  Golang >  Go问答

尝试比较 V 类型的两个值与 Go 泛型不起作用

来源:stackoverflow

时间:2024-04-28 20:27:37 418浏览 收藏

在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是Golang学习者,那么本文《尝试比较 V 类型的两个值与 Go 泛型不起作用》就很适合你!本篇内容主要包括##content_title##,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

go版本:go1.21rc2

我正在 go 中使用泛型编写一个函数,它接受一个值,如果该值在映射中则返回 true/false。

在下面的版本1中,我不明白为什么当两个值的类型为any时无法比较?但是在版本 2 中转换为 any 后,它现在可以工作了...我想我错过了一些明显的东西,但我不太明白这一点。

版本 1(不工作):

func invalues[m ~map[k]v, k comparable, v any](m m, v v) bool {
    for _, x := range maps.values(m) {
        if x == v {
            return true
        }
    }
    return false
}

版本 2(工作中):

func InValues[M ~map[K]V, K comparable, V any](m M, v V) bool {
    for _, x := range maps.Values(m) {
        if any(x) == any(v) {
            return true
        }
    }
    return false
}

正确答案


V 需要是 comparable 才能允许 ==
转换为 any 然后比较有效,因为它在 any 之间使用非通用 == ,这是始终允许的。

到这里,我们也就讲完了《尝试比较 V 类型的两个值与 Go 泛型不起作用》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

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