//type:interface value:sturctFunc printstruct (t reflect. Type, v reflect. Value, PCint) {fmt. Println ("") forI: =0; I < T.numfield (); i++{fmt. Print (Strings. Repeat (" ", PC), T.field (i). Name,":") Value:=V.field (i) Printvar (value. Interface (), PC+2) fmt. Println ("")}}func Printarrayslice (v reflect. Value, PCint) { forJ: =0; J < V.len (); J + +{Printvar (V.index (j). Interface (), PC+2)}}func Printmap (v reflect. Value, PCint) { for_, K: =Range V.mapkeys () {Printvar (K.interface (), PC) Printvar (V.mapindex (k). Interface (), PC)}}func Printvar (iInterface{}, Identint) {t:=reflect. TypeOf (i) V:=reflect. ValueOf (i)ifV.kind () = =reflect. Ptr {v=reflect. ValueOf (i). Elem () T=v.type ()}SwitchV.kind () { Casereflect. Array:printarrayslice (V, ident) Casereflect. Chan:fmt. Println ("Chan") Casereflect. Func:fmt. Println ("Func") Casereflect. Interface:fmt. Println ("Interface") Casereflect. Map:printmap (V, ident) Casereflect. Slice:printarrayslice (V, ident) Casereflect. Struct:printstruct (T, V, ident) Casereflect. Unsafepointer:fmt. Println ("Unsafepointer") default: FMT. Print (Strings. Repeat (" ", ident), V.interface ())}}
Golang format Print struct