Go 反射字段索引 - 单索引与切片

reflect.StructField有一个Index输入字段[]int。关于此的文档有点令人困惑:


    Index     []int     // index sequence for Type.FieldByIndex

当然,Type.FieldByIndex正如预期的那样,对其行为进行了更清晰的解释:


    // FieldByIndex returns the nested field corresponding

    // to the index sequence.  It is equivalent to calling Field

    // successively for each index i.

    // It panics if the type's Kind is not Struct.

    FieldByIndex(index []int) StructField

但是,还有Type.Field():


    // Field returns a struct type's i'th field.

    // It panics if the type's Kind is not Struct.

    // It panics if i is not in the range [0, NumField()).

    Field(i int) StructFiel

因此,它们分别的行为非常清楚。


我的问题:究竟哪些字段/将在什么情况下reflect.StructField有一个Index用len(field.Index) > 1?这是否支持枚举嵌入式字段(可通过父级中的匿名字段访问)?在其他情况下会发生吗?(即假设 if 是否安全!field.Anonymous,那么我们可以将其field.Index[0]用作参数Field(i int)?)


子衿沉夜
浏览 203回答 2
2回答

慕盖茨4494581

这是一个例子。为了回答这个问题,我深入研究了反射测试。package mainimport (    "fmt"    "reflect")type (    Bar struct {        Val string    }    Foo struct {        Bar    })func main() {    t := reflect.TypeOf(Foo{})    f, _ := t.FieldByName("Val")    fmt.Println(f.Index)         // [0 0]}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go