code: func toReflectType(dtype DataType) reflect.Type {
  	switch dtype.Kind() {
  	case BooleanKind:
  		return reflect.TypeOf(true)
  	case IntegerKind:
  		return reflect.TypeOf(int(0))
  	case NumberKind:
  		return reflect.TypeOf(float64(0))
  	case UUIDKind, StringKind:
  		return reflect.TypeOf("")
  	case DateTimeKind:
  		return reflect.TypeOf(time.Time{})
  	case ObjectKind, UserTypeKind, MediaTypeKind:
  		return reflect.TypeOf(map[string]interface{}{})
  	case ArrayKind:
  		return reflect.SliceOf(toReflectType(dtype.ToArray().ElemType.Type))
  	case HashKind:
  		hash := dtype.ToHash()
  		// avoid complication: not allow object as the hash key
  		var ktype reflect.Type
  		if !hash.KeyType.Type.IsObject() {
  			ktype = toReflectType(hash.KeyType.Type)
  		} else {
  			ktype = reflect.TypeOf([]interface{}{}).Elem()
  		}
  		return reflect.MapOf(ktype, toReflectType(hash.ElemType.Type))
  	default:
  		return reflect.TypeOf([]interface{}{}).Elem()
  	}
  }
docs: // toReflectType converts the DataType to reflect.Type.