diff --git a/any.go b/any.go new file mode 100644 index 0000000..98aa8e9 --- /dev/null +++ b/any.go @@ -0,0 +1,65 @@ +// Package wrapper ... +// +// Description : wrapper ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 2023-06-01 18:18 +package wrapper + +import "reflect" + +// AnyDataType ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 18:19 2023/6/1 +func AnyDataType(data interface{}) *AnyType { + return &AnyType{ + data: data, + } +} + +// AnyType ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 18:19 2023/6/1 +type AnyType struct { + data interface{} +} + +// IsNil 是否为 nil +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 18:21 2023/6/1 +func (at *AnyType) IsNil() bool { + return at.data == nil +} + +// Type 获取类型 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 18:22 2023/6/1 +func (at *AnyType) Type() string { + if at.IsNil() { + return DataTypeNil + } + reflectType := reflect.TypeOf(at.data) + switch reflectType.Kind() { + case reflect.Slice: + return DataTypeAnySlice + case reflect.Array: + return DataTypeAnySlice + case reflect.Map: + return DataTypeAnyObject + case reflect.Struct: + return DataTypeAnyObject + case reflect.Pointer: + return DataTypePtr + default: + return reflectType.Kind().String() + } +} diff --git a/define.go b/define.go index 2bf0ae3..6f869b2 100644 --- a/define.go +++ b/define.go @@ -8,7 +8,10 @@ package wrapper const ( - DataTypeAny = "interface" + DataTypeUnknown = "unknown" + DataTypeNil = "nil" + DataTypeAny = "interface" + DataTypePtr = "ptr" DataTypeString = "string"