如何扩展结构定义以显示嵌套类型?例如,我想扩展一下这个
type Foo struct {
x int
y []string
z Bar
}
type Bar struct {
a int
b string
}类似这样的东西:
type Foo struct {
x int
y []string
z Bar
struct {
a int
b string
}
}上下文:对现有代码进行逆向工程。
发布于 2017-03-16 11:36:23
您可以尝试使用这些方法来列出在结构中定义的所有字段,并递归地列出在该方法中找到的结构。
它不能精确地产生您所要求的输出,但它非常接近,并且可能可以进行调整以实现这一点。
package main
import (
"reflect"
"fmt"
)
type Foo struct {
x int
y []string
z Bar
}
type Bar struct {
a int
b string
}
func printFields(prefix string, t reflect.Type) {
for i := 0; i < t.NumField(); i++ {
f := t.Field(i)
fmt.Printf("%v%v %v\n", prefix, f.Name, f.Type)
if f.Type.Kind() == reflect.Struct {
printFields(fmt.Sprintf(" %v", prefix), f.Type)
}
}
}
func printExpandedStruct(s interface{}) {
printFields("", reflect.ValueOf(s).Type())
}
func main() {
printExpandedStruct(Foo{})
}由于上述原因,我得到了以下输出:
x int
y []string
z main.Bar
a int
b stringhttps://stackoverflow.com/questions/42819318
复制相似问题