如何在Go中进行类型转换

时间:2016-10-26 21:51:51

标签: go

我正在尝试创建一个递归例程来打印复杂json的元素

func printMap(m map[string]interface{}) {
for k, v := range m {
    typ := reflect.ValueOf(v).Kind()
    if typ == reflect.Map {
        printMap(v)
    } else {
        fmt.Println(k, v)
    }
} }

但是我遇到了构建错误 可以使用类型v(类型接口{})作为类型map [string] interface {}

有没有办法输入它或某种程度我可以让它工作?

1 个答案:

答案 0 :(得分:1)

使用type assertion

func printMap(m map[string]interface{}) {
  for k, v := range m {
    m, ok := v.(map[string]interface{}) // <-- assert that v is a map
    if ok {
        printMap(m)
    } else {
        fmt.Println(k, v)
    }
  }
}

playground example