登录
首页 >  Golang >  Go问答

在 Golang 中遍历嵌套的接口列表的方法

来源:stackoverflow

时间:2024-03-23 09:27:30 312浏览 收藏

在 Go 语言中,遍历嵌套接口列表时遇到错误,提示无法遍历类型为 interface{} 的变量。为了解决此问题,可以将接口转换为切片后进行迭代。通过转换后,可以访问切片中的元素并对其进行操作。

问题内容

我用 golang 编写了以下代码:

package main

import (
    "fmt"
    "reflect"
)

func main() {
    var i []interface{}
    var j []interface{}
    var k []interface{}
    
    i = append(i, 1)
    i = append(i, "test")
    
    j = append(j, 2)
    j = append(j, "try")
    
    k = append(k, i)
    k = append(k, j)
    
    
    for _, outer := range k {
        fmt.println(reflect.typeof(outer))
        //for _, inner := range outer {
        //  fmt.println(inner)
        //}
    }
}

此代码的输出表明,outer 是以下类型:

[]interface{}
[]interface{}

但是,当我尝试迭代外部时,它给出了错误:

cannot range over outer (type interface {})

如何从接口的嵌套列表中检索值?任何帮助将不胜感激。


正确答案


为了从嵌套接口中检索值,您可以在将其转换为切片后对其进行迭代。我按如下方式重新创建了您的程序:

package main

import (
    "fmt"
)

func main() {
    var i []interface{}
    var j []interface{}
    var k []interface{}

    i = append(i, 1)
    i = append(i, "test")

    j = append(j, 2)
    j = append(j, "try")

    k = append(k, i)
    k = append(k, j)

    for _, outer := range k {

        fmt.println(outer.([]interface{}))
        for z := 0; z < len(outer.([]interface{})); z++ {
            fmt.println(outer.([]interface{})[z])
        }

    }
}

输出:

[1 Test]
1
Test
[2 Try]
2
Try

理论要掌握,实操不能落!以上关于《在 Golang 中遍历嵌套的接口列表的方法》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>