gpt4 book ai didi

go - 遍历接口(interface)数组

转载 作者:IT王子 更新时间:2023-10-29 01:22:09 30 4
gpt4 key购买 nike

我写的代码:

switch v.(type) {
case []interface{}:
fmt.Println(reflect.TypeOf(v))
for index, element := range v {
fmt.Println("Inside for")
}
default:
fmt.Println("I don't know how to handle this.")
}

现在,我的 reflect.TypeOf(v) 将类型输出为 []interface {} 。但是,我无法遍历接口(interface)数组。我遇到错误:cannot range over v (type interface {})。有人可以解释一下为什么吗?另外,解决方法是什么?

最佳答案

type 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

另请注意,当您只想打印变量的类型时,您可以将“%T”与 fmt.Printf 一起使用,而不是(直接)使用 reflect 包。

最后,请注意,如果您有多个非默认子句,类型切换就是您想要的,但是如果像您的示例中那样,您实际上只有一种类型感兴趣,那么您应该执行以下操作:

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)
}

关于go - 遍历接口(interface)数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28954646/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com