如何声明可以在golang中接受任何类型的值的map参数?

时间:2019-06-03 02:54:44

标签: go generics

为方便起见:go playground

我有一个函数,它不关心map参数的值类型,所以 我这样声明:

func foo(generalMap map[string]interface{}) {}

但是当我用这样的指定地图调用它时:

myMap := make(map[string]Bar)
foo(myMap)

然后出现编译器错误: cannot use myMap (type map[string]Bar) as type map[string]interface {} in argument to foo

1 个答案:

答案 0 :(得分:3)

您不能这样做。 map[string]interface{}map[string]Bar是两种不同的类型。您必须手动使用map[string]interface{}构建一个map[string]Bar

mapAny := make(map[string]interface{})
for key, val := range myMap {
    mapAny[key] = val
}
foo(mapAny)

您需要的是C ++中的模板,但是Golang没有模板支持。