diff --git a/data_type.go b/data_type.go index 09ace11..cfb4030 100644 --- a/data_type.go +++ b/data_type.go @@ -310,3 +310,123 @@ func getMergeDataTypeList(dataTypeList ...[]DataType) []DataType { } return res } + +// GetDataTypeDefaultValue 获取不同类型的默认值 +func GetDataTypeDefaultValue(dataType string) any { + switch dataType { + case DataTypeInt.String(): + return int(0) + case DataTypeInt8.String(): + return int8(0) + case DataTypeInt16.String(): + return int16(0) + case DataTypeInt32.String(): + return int32(0) + case DataTypeInt64.String(): + return int64(0) + case DataTypeUint.String(): + return uint(0) + case DataTypeUint8.String(): + return uint8(0) + case DataTypeUint16.String(): + return uint16(0) + case DataTypeUint32.String(): + return uint32(0) + case DataTypeUint64.String(): + return uint64(0) + case DataTypeFloat32.String(): + return float32(0) + case DataTypeFloat64.String(): + return float64(0) + case DataTypeBool.String(): + return false + case DataTypeString.String(): + return "" + case DataTypeIntPtr.String(): + return new(int) + case DataTypeInt8Ptr.String(): + return new(int8) + case DataTypeInt16Ptr.String(): + return new(int16) + case DataTypeInt32Ptr.String(): + return new(int32) + case DataTypeInt64Ptr.String(): + return new(int64) + case DataTypeUintPtr.String(): + return new(uint) + case DataTypeUint8Ptr.String(): + return new(uint8) + case DataTypeUint16Ptr.String(): + return new(uint16) + case DataTypeUint32Ptr.String(): + return new(uint32) + case DataTypeUint64Ptr.String(): + return new(uint64) + case DataTypeFloat32Ptr.String(): + return new(float32) + case DataTypeFloat64Ptr.String(): + return new(float64) + case DataTypeBoolPtr.String(): + return new(bool) + case DataTypeMapStrAny.String(): + return new(map[string]any) + case DataTypeMapAnyAny.String(): + return new(map[any]any) + case DataTypeMapStrBool.String(): + return new(map[string]bool) + case DataTypeMapStrInt.String(): + return new(map[string]int) + case DataTypeMapStrFloat.String(): + return new(map[string]float64) + case DataTypeMapStrUint.String(): + return new(map[string]uint) + case DataTypeMapStrSlice.String(): + return new(map[string][]any) + case DataTypeMapStrStr.String(): + return new(map[string]string) + case DataTypeSliceAny.String(): + return new([]any) + case DataTypeSliceString.String(): + return new([]string) + case DataTypeSliceBool.String(): + return new([]bool) + case DataTypeSliceInt.String(): + return new([]int) + case DataTypeSliceUint.String(): + return new([]uint) + case DataTypeSliceFloat.String(): + return new([]float64) + case DataTypeSliceMapAnyAny.String(): + // map[any]any 序列化会有问题,当做 map[string]any 处理 + return new([]map[string]any) + case DataTypeSliceMapStringAny.String(): + return new([]map[string]any) + default: + // 序列化之后的map + for _, dataTypeItem := range DataTypeMapMarshal { + if dataTypeItem.String() == dataType { + return "" + } + } + // 序列化之后的slice + for _, dataTypeItem := range DataTypeSliceMarshal { + if dataTypeItem.String() == dataType { + return "" + } + } + // 指定分隔符分割的slice + for _, dataTypeItem := range DataTypeSliceSplit { + if dataTypeItem.String() == dataType { + return "" + } + } + // 未枚举的slice类型用any接收 + for _, dataTypeItem := range DataTypeSlice { + if dataTypeItem.String() == dataType { + return new([]any) + } + } + } + // 未枚举的一律用any接收 + return *new(any) +}