如何从Golang的嵌套结构中获取值

是静态类型语言的新手,所以我要解构这种复杂的结构</ p>
\ n

  type MyStruc1结构{
Property1 uint16json:property1
Property2结构{
Sub2Property1字符串json:sub2property1
Sub2Property2 uint16json:sub2property2
Sub2Property3结构{
SubSub2Property1字符串json:subsub2property1
SubSub2Property2字符串json:subsub2property1
n json:sub3property2
Sub3Property3结构{
SubSub3Property1字符串json:subsub3property1
SubSub3Property2字符串json:subsub3property1
}json:sub3peroperty3
}json:property3
Property4字符串:property4
}
</ code> </ pre>

如何编写函数或struct方法以 接受这些数组中的任何一个并从MyStruct1返回值? </ p>

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

strArray2:= [] string {“ Property3” ,“ Sub3Property1”}

strArray3:= [] string {“ Property4”}

strArray4:= [] string {“ Property1”}
</ code> </ pre>

谢谢您的任何答复</ p>
</ div>

展开原文

原文

Very new to statically typed languages, so I have this complex struct I'm 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`
}

How do i write a function or struct method to accept any one of these arrays and return the value from MyStruct1? Is this possible?

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

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

strArray3 := []string{"Property4"}

strArray4 := []string{"Property1"}

Thank you ahead of time with any replies

drecy22400
drecy22400 感谢您的答复,我最终在这里找到了一个名为jsonq的软件包:github.com/jmoiron/jsonq。可以满足我的需求
3 年多之前 回复
douji6735
douji6735 不确定我是否理解问题,但请查看github.com/nytlabs/gojsonexplode。这符合您的目的吗?该软件包有一些粗糙的边缘/错误,但我确实有针对它们的补丁程序。
3 年多之前 回复
douluo5937
douluo5937 这将是最好的方法吗?我正在解组json,我需要通过我随地吐痰的字符串(例如Property2.Sub2Property3.SubSub2Property1)提取值。因此,没有好的方法可以做到这一点吗?
3 年多之前 回复
douque9982
douque9982 您正在尝试与类型系统对抗。不要那样做您会大声疾呼。重新设计。
3 年多之前 回复

1个回答



您可以通过 reflect </ em> </ p>

  func FieldBySlice(  strct interface {},字段[] string)interface {} {
val:= reflect.ValueOf(strct)
_,field:=范围字段{
val = val.FieldByName(field)
} \ n返回val.Interface()
}
</ code> </ pre>

此代码有效,但是只有在非常必要时才使用它。 这很丑陋,不建议使用。 尝试去思考不同,Go不是脚本,动态语言</ p>
</ div>

展开原文

原文

You can with reflect

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

This code works, but you will use it only if very much necessary. It's ugly and not recommended. Try to think different, Go is not scripting, dynamic language

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐