func injectEnv(c AppConfig) AppConfig {
injectEnv2(&c)
return c
}
func injectEnv2(c interface{}) {
fmt.Println(">>")
tmpC := c
if reflect.TypeOf(c).Kind() == reflect.Ptr {
tmpC = reflect.Indirect(reflect.ValueOf(c)).Interface()
}
t := reflect.TypeOf(tmpC)
v := reflect.ValueOf(tmpC)
for i := 0; i < t.NumField(); i++ {
f := t.Field(i)
fv := v.Field(i)
fmt.Println("===")
fmt.Printf("Name: %s\n", f.Name)
fmt.Printf("Type: %s(%s)\n", f.Type, f.Type.Kind())
switch f.Type.Kind() {
case reflect.Struct:
injectEnv2(fv.Interface())
break
default:
break
}
}
fmt.Println("<<")
}