如何将地图数据传递给通用函数(isExist)以检查给定值是否存在 传递的地图类型可以是map [int] int或map [string] string或任何
func IsExist(text int, data map[interface{}]interface{}) bool {
for key, _ := range data {
if data[key] == text {
return true
}
}
return false
}
func main() {
var data = make(map[string]int)
//var data =map[interface {}]interface{} this case will working fine
data["a"] = 1
data["b"] = 2
fmt.Println(IsExist(2, data))
//throwing error that 'cannot use data (type map[string]int) as type map[interface {}]interface {} in argument to IsExist'
}
请让我知道如何概括它?
答案 0 :(得分:2)
Go的类型系统无法做到这一点。 UPDATE Table1 SET Hash = 0x4cb47abddf8a9c348c7a7c20abd0b1d5
和map[string]int
是不同的类型。此外,对象在存储器中的存储/表示取决于类型。字符串具有一个内存布局。但是打包为map[interface {}]interface{}
的同一字符串-完全不同。出于相同的原因,您无法将interface{}
“投射”到[]int
。您必须将元素复制到新切片中。
这里也一样。从一开始就将地图设为[]interface{}
,或者在调用泛型函数之前将所有键值对复制到一个。