2 回答
TA贡献1848条经验 获得超2个赞
无需反思;使用类型断言并将值传递回您的 sanitize 函数
func sanitizeMap(m map[string]interface{}) map[string]interface{} {
for k, v := range m {
_ = k
if v, ok := v.(map[string]interface{}); ok {
sanitizeMap(v)
}
}
return m
}
TA贡献1951条经验 获得超3个赞
您可以使用反射:
import "reflect"
func sanitize_map(m map[string]interface{}) map[string]interface{} {
for k, v := range m {
// Do something with the key k
kind := reflect.ValueOf(v).Kind()
if kind == reflect.Map {
// You have to be sure the value is of type map[string]interface{}
newValue := v.(map[string]interface{})
// recursively call sanitize
sanitize_map(newValue)
}
}
return m
}
所述carveat是:在地图上的每一个值,必须为不一个map(原子)或一个map[string]interface{}。注意map[string]interface{}和map[string]map[string]interface{}是完全不相关的类型,您不能在第一个类型上使用第二个类型的类型断言。
但是,您可以将 a 放入 amap[string]map[string]string中map[string]interface{},如下所示:
innerMap1 := make(map[string]interface{})
// map to strings
innerMap1["a"] = "String 1"
innerMap2 := make(map[string]interface{})
// set mappings, maybe to other types
outerMap := make(map[string]interface{})
outerMap["ABC"] = innerMap1
outerMap["DEF"] = innerMap2
现在您可以将 outerMap 传递给该函数,reflect 将自动为您“剥离”地图层。
- 2 回答
- 0 关注
- 183 浏览
添加回答
举报