// Package wrapper ... // // Description : wrapper ... // // Author : go_developer@163.com<白茶清欢> // // Date : 2023-06-01 18:18 package wrapper import ( "git.zhangdeman.cn/zhangdeman/serialize" "reflect" ) // AnyDataType ... // // Author : go_developer@163.com<白茶清欢> // // Date : 18:19 2023/6/1 func AnyDataType(data interface{}) *AnyType { at := &AnyType{ data: data, } at.dataType = at.Type() return at } // AnyType ... // // Author : go_developer@163.com<白茶清欢> // // Date : 18:19 2023/6/1 type AnyType struct { data interface{} dataType string } // 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 len(at.dataType) > 0 { // 已经处理过的,无需在处理 return at.dataType } if at.IsNil() { return DataTypeNil } reflectType := reflect.TypeOf(at.data) switch reflectType.Kind() { case reflect.String: return DataTypeString case reflect.Slice, reflect.Array: return DataTypeSlice case reflect.Map, reflect.Struct: return DataTypeObject case reflect.Pointer: return DataTypePtr case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: return DataTypeInt case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: return DataTypeUint case reflect.Bool: return DataTypeBool case reflect.Float32, reflect.Float64: return DataTypeFloat default: return DataTypeUnknown } } // ToString 转为字符串 // // Author : go_developer@163.com<白茶清欢> // // Date : 18:32 2023/6/1 func (at *AnyType) ToString() String { switch at.dataType { case DataTypeNil: return String("") case DataTypeObject: fallthrough case DataTypeSlice: fallthrough case DataTypePtr: return String(serialize.JSON.MarshalForString(at.data)) } return String("") } // ToObject 任意类型转为对象 // // Author : go_developer@163.com<白茶清欢> // // Date : 17:19 2023/10/11 func (at *AnyType) ToObject() MapResult { return MapResult{ Value: EasyMapFromString(at.ToString().Value()), Err: nil, } } func (at *AnyType) ToIntSlice() { } func (at *AnyType) ToUintSlice() { } func (at *AnyType) ToStringSlice() { } func (at *AnyType) ToFloatSlice() { } func (at *AnyType) ToBoolSlice() { } func (at *AnyType) ToAnySlice() { }