我如何创建通用功能来接收Go lang中的地图?

时间:2019-04-19 12:45:13

标签: go

如何将地图数据传递给通用函数(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'

}

请让我知道如何概括它?

1 个答案:

答案 0 :(得分:2)

Go的类型系统无法做到这一点。 UPDATE Table1 SET Hash = 0x4cb47abddf8a9c348c7a7c20abd0b1d5 map[string]int是不同的类型。此外,对象在存储器中的存储/表示取决于类型。字符串具有一个内存布局。但是打包为map[interface {}]interface{}的同一字符串-完全不同。出于相同的原因,您无法将interface{}“投射”到[]int。您必须将元素复制到新切片中。

这里也一样。从一开始就将地图设为[]interface{},或者在调用泛型函数之前将所有键值对复制到一个。