Cuba membandingkan dua nilai jenis V dengan Go generik tidak berfungsi

WBOY
Lepaskan: 2024-02-09 12:39:09
ke hadapan
515 orang telah melayarinya

尝试比较 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
}
Salin selepas log masuk

版本 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
}
Salin selepas log masuk

解决方法

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

Atas ialah kandungan terperinci Cuba membandingkan dua nilai jenis V dengan Go generik tidak berfungsi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!