为方便起见: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
答案 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没有模板支持。