我想要的是获取A
到B
的字段,例如
type A struct {
Field_1 string
}
type B struct {
*A
}
fieldsOfA := someMagicFunc(&B{})
答案 0 :(得分:2)
您可以使用Value
获取某个变量的reflect.ValueOf()
反映对象。
如果您还想修改变量或其字段,则必须将变量的地址(指针)传递给ValueOf()
。在这种情况下,Value
将属于指针(不是指向的值),但您可以使用Value.Elem()
来导航"到尖头物体的Value
。
*A
嵌入在B
中,因此A
的字段可以从B
的值引用。您只需使用Value.FieldByName()
按名称访问字段,即可获取或设置其值。
这样做可以在Go Playground上尝试:
b := B{A: &A{"initial"}}
fmt.Println("Initial value:", *b.A)
v := reflect.ValueOf(&b).Elem()
fmt.Println("Field_1 through reflection:", v.FieldByName("Field_1").String())
v.FieldByName("Field_1").SetString("works")
fmt.Println("After modified through reflection:", *b.A)
输出:
Initial value: {initial}
Field_1 through reflection: initial
After modified through reflection: {works}
我建议您阅读此博客文章,了解Go中反射的基础知识: