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)?)
2 回答
慕盖茨4494581
TA贡献1850条经验 获得超11个赞
这是一个例子。为了回答这个问题,我深入研究了反射测试。
package main
import (
"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]
}
- 2 回答
- 0 关注
- 197 浏览
添加回答
举报
0/150
提交
取消