英文:
How do typecast a type in 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 (type interface {})
用作类型 map[string]interface{}
。
有没有办法进行类型转换或者其他方法可以使其正常工作?
英文:
I am trying to make a recursive routine that prints the elements of a complex 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)
}
} }
but I get a build error
can use type v ( type interface {} ) as type map[string] interface{}
Is there a way to type cast it or someway I can get it to work?
答案1
得分: 1
使用类型断言(type assertion):
func printMap(m map[string]interface{}) {
for k, v := range m {
m, ok := v.(map[string]interface{}) // < -- 断言 v 是一个 map
if ok {
printMap(m)
} else {
fmt.Println(k, v)
}
}
}
英文:
Use a 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)
}
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论