code: func NewValue(t reflect.Type) (v reflect.Value) {
  	v = reflect.New(t)
  	ov := v
  	for t.Kind() == reflect.Ptr {
  		v = v.Elem()
  		t = t.Elem()
  		e := reflect.New(t)
  		v.Set(e)
  	}
  
  	if e := v.Elem(); e.Kind() == reflect.Map && e.IsNil() {
  		v.Elem().Set(reflect.MakeMap(v.Elem().Type()))
  	}
  	return ov
  }
docs: // NewValue new struct value with reflect type