给定一个如下的结构体:
我想反思一下 D,并且获取到字段 X、Y、Z。
直觉上,在尝试解决问题之前,我本以为我能够通过反射遍历结构体 D 并获取所有字段(X、Y、Z),而不必处理 B。
但是正如你所看到的,我只能通过反射看到嵌套的结构体 B,而无法看到它的字段。
为什么我想要这样做?
想象一个常见的结构(在这个例子中是B),它通过嵌入在多个其他结构中使用。使用反射,试图将D复制到一个不同包中的另一个类似结构中。用于复制的目标结构将所有属性平铺布置(没有嵌入)。因此,源结构与目标结构之间存在不匹配(嵌入与非嵌入),但所有平铺布置的属性都是相同的。我不想为每个结构创建自定义解决方案。
type B struct {
X string
Y string
}
type D struct {
B
Z string
}
我想反思一下 D,并且获取到字段 X、Y、Z。
直觉上,在尝试解决问题之前,我本以为我能够通过反射遍历结构体 D 并获取所有字段(X、Y、Z),而不必处理 B。
但是正如你所看到的,我只能通过反射看到嵌套的结构体 B,而无法看到它的字段。
http://play.golang.org/p/qZQD5GdTA8
有没有办法在反射到D时使B完全透明?为什么我想要这样做?
想象一个常见的结构(在这个例子中是B),它通过嵌入在多个其他结构中使用。使用反射,试图将D复制到一个不同包中的另一个类似结构中。用于复制的目标结构将所有属性平铺布置(没有嵌入)。因此,源结构与目标结构之间存在不匹配(嵌入与非嵌入),但所有平铺布置的属性都是相同的。我不想为每个结构创建自定义解决方案。
if v.Kind() == reflect.Struct && v.Anonymous{
。 - themihai