卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章34835本站已运行393

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

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

php小编苹果发现,在 Go 语言中,使用泛型时无法直接比较 V 类型的两个值。这意味着无法像比较字符串或整数那样简单地使用 == 或 != 进行比较。这是因为泛型的实现方式不同,无法直接进行值的比较。在这种情况下,我们需要使用自定义的比较函数或方法来进行比较操作,以实现我们所需的功能。这是一个需要注意的细节,尤其在编写涉及泛型的代码时。

问题内容

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 之间使用非通用 == ,这是始终允许的。

卓越飞翔博客
上一篇: Kivy 屏幕管理器 kivy\properties.pyx KeyError 和 AttributeError:“super”对象没有属性“__getattr__”。您的意思是:“__setatt
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏