如何从Golang中的嵌套Struct获取值

时间:2017-01-24 18:25:12

标签: go struct unmarshalling

静态类型语言非常新,所以我有这个复杂的结构我是Unmarshalling

type MyStruc1 struct {
    Property1 uint16 `json:property1`
    Property2 struct {
        Sub2Property1 string `json:sub2property1`
        Sub2Property2 uint16 `json:sub2property2`
        Sub2Property3 struct {
            SubSub2Property1 string `json:subsub2property1`
            SubSub2Property2 string `json:subsub2property1`
        } `json:sub2property3`
    } `json:property2`
    Property3 struct {
        Sub3Property1 string `json:sub3property1`
        Sub3Property2 uint16 `json:sub3property2`
        Sub3Property3 struct {
            SubSub3Property1 string `json:subsub3property1`
            SubSub3Property2 string `json:subsub3property1`
        } `json:sub3peroperty3`
    } `json:property3`
    Property4 string `json:property4`
}

如何编写函数或struct方法来接受这些数组中的任何一个并从MyStruct1返回值?这可能吗?

strArray1 := []string{"Property2", "Sub2Property3", "SubSub2Property1"}

strArray2 := []string{"Property3", "Sub3Property1"}

strArray3 := []string{"Property4"}

strArray4 := []string{"Property1"}

提前感谢您的回复

1 个答案:

答案 0 :(得分:-1)

您可以使用反映

func FieldBySlice(strct interface{}, fields []string) interface{} {
    val := reflect.ValueOf(strct)
    for _, field := range fields {
        val = val.FieldByName(field)
    }
    return val.Interface()
}

此代码有效,但只有在非常必要时才会使用它。这很难看,不推荐。尝试思考不同,Go不是脚本,动态语言