为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
子衿沉夜 2021-10-11 10:42:18
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]

}


查看完整回答
反对 回复 2021-10-11
  • 2 回答
  • 0 关注
  • 197 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信