Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Recursion 使用递归在go中获取深度嵌套结构_Recursion_Go_Types - Fatal编程技术网

Recursion 使用递归在go中获取深度嵌套结构

Recursion 使用递归在go中获取深度嵌套结构,recursion,go,types,Recursion,Go,Types,我需要解析从深度嵌套的JSON对象读取的接口。我使用下面的递归函数来获取大部分数组 func arrayReturn(m map[string]interface{}) []interface{} { for _, v:= range m { if v.(type) == map[string]interface{} { return arrayReturn(v.(map[string]interface{})) }

我需要解析从深度嵌套的JSON对象读取的接口。我使用下面的递归函数来获取大部分数组

func arrayReturn(m map[string]interface{}) []interface{} {
    for _, v:= range m {
        if v.(type) == map[string]interface{} {
            return arrayReturn(v.(map[string]interface{}))
        }
        if v.(type) == string {
            return v.([]interface{})
        } 
    }
}
这为
返回
行提供了此错误:

syntax error: unexpected return, expecting expression
“期待表达”是什么意思

此语法:

if v.(type) == map[string]interface{} { /* ... */ }
这是无效的。不能与类型进行比较,只能与值进行比较

您想要的可以使用a解决,其中案例确实是类型:

func arrayReturn(m map[string]interface{}) []interface{} {
    for _, v := range m {
        switch v2 := v.(type) {
        case map[string]interface{}:
            return arrayReturn(v2)     // v2 is of type map[string]interface{}
        case []interface{}:
            return v2                  // v2 is of type []interface{}
        }
    }
    return nil
}
还请注意,如果在
开关
关键字之后使用短变量声明,则在每个
案例
中使用的变量类型将是您在
案例
中指定的,因此不需要进一步的类型断言

此语法:

if v.(type) == map[string]interface{} { /* ... */ }
这是无效的。不能与类型进行比较,只能与值进行比较

您想要的可以使用a解决,其中案例确实是类型:

func arrayReturn(m map[string]interface{}) []interface{} {
    for _, v := range m {
        switch v2 := v.(type) {
        case map[string]interface{}:
            return arrayReturn(v2)     // v2 is of type map[string]interface{}
        case []interface{}:
            return v2                  // v2 is of type []interface{}
        }
    }
    return nil
}
还请注意,如果在
开关
关键字之后使用短变量声明,则在每个
案例
中使用的变量类型将是您在
案例
中指定的,因此不需要进一步的类型断言