gpt4 book ai didi

reflection - Go 反射(reflect)字段索引 - 单个索引与 slice

转载 作者:数据小太阳 更新时间:2023-10-29 03:06:58 26 4
gpt4 key购买 nike

reflect.StructField 有一个类型为 []intIndex 字段。关于此的文档有点令人困惑:

    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?这是否支持枚举嵌入式字段(可通过父级中的匿名字段访问)?在其他情况下会发生吗? (即假设 !field.Anonymous 是否安全,那么我们可以使用 field.Index[0] 作为 Field(i int )?)

最佳答案

它可以递归地引用嵌入或非嵌入结构中的字段:

type Foo struct {
Bar string
}

type Baz struct {
Zoo Foo
}

func main() {

b := Baz{Zoo:Foo{"foo"}}
v := reflect.ValueOf(b)

fmt.Println(v.FieldByIndex([]int{0})) //output: <main.Foo Value>

fmt.Println(v.FieldByIndex([]int{0, 0})) //output: foo

}

关于reflection - Go 反射(reflect)字段索引 - 单个索引与 slice ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30576874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com