当前位置: > > > > 尝试比较 V 类型的两个值与 Go 泛型不起作用
尝试比较 V 类型的两个值与 Go 泛型不起作用
来源:stackoverflow
2024-04-28 20:27:37
0浏览
收藏
在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 泛型不起作用》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注米云公众号,带你了解更多关于的知识点!
