2 回答
TA贡献1864条经验 获得超6个赞
在类型 switch 中,如果您希望访问转换为适当类型的变量,只需使用类似的东西,switch x := v.(type)并且在 switch 的每种情况下x都将具有适当的值。规范中有一个例子。你甚至可以这样做,switch v := v.(type)并且在 switch 语句中会有一个 v 的影子版本。
例如:
switch x := v.(type) {
case []interface{}:
fmt.Printf("got %T\n", x)
for i, e := range x {
fmt.Println(i, e)
}
default:
fmt.Printf("I don't know how to handle %T\n", v)
}
playground
另请注意,fmt.Printf当您只想打印变量的类型时,您可以使用 "%T"而不是(直接)使用反射包。
最后,请注意,如果您有多个非默认子句,则需要类型切换,但如果如您的示例所示,您确实只有一种类型感兴趣,那么您应该执行以下操作:
if x, ok := v.([]interface{}); ok {
fmt.Printf("got %T\n", x)
for i, e := range x {
fmt.Println(i, e)
}
} else {
fmt.Printf("I don't know how to handle %T\n", v)
}
TA贡献1946条经验 获得超4个赞
您始终可以使用v.([]interface{})
. 我在尝试解析必须被视为接口的异类 json 对象时遇到了同样的问题。
尽管除非您事先了解数据,否则这在您的循环中可能不起作用。
- 2 回答
- 0 关注
- 233 浏览
添加回答
举报