您可以尝试按照以下方式进行操作,以列出结构中定义的所有字段,然后递归列出以这种方式找到的结构。
它不能完全产生您所要求的输出,但是非常接近,并且可以进行调整。
package mainimport ( "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 %vn", 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 inty []stringz main.Bar a int b string



