如何扩展结构定义以显示嵌套类型?例如,我想扩展这个
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 } }
上下文:对现有代码进行逆向工程。
您可以尝试按照以下方式进行操作,以列出结构中定义的所有字段,然后递归列出以这种方式找到的结构。
它不能完全产生您所要求的输出,但是非常接近,并且可以进行调整。
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 string