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
之间使用非通用 ==
,这是始终允许的。
以上就是尝试比较 V 类型的两个值与 Go 泛型不起作用的详细内容,更多请关注编程网其它相关文章!