t.marcusの外部記憶装置

忘備録とかちょっとした考えとかをつらつらと...

やりかけメモ

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("<<")
}