138 lines
2.5 KiB
Go
138 lines
2.5 KiB
Go
// Package wrapper ...
|
|
//
|
|
// Description : wrapper ...
|
|
//
|
|
// Author : go_developer@163.com<白茶清欢>
|
|
//
|
|
// Date : 2023-06-01 18:18
|
|
package wrapper
|
|
|
|
import (
|
|
"fmt"
|
|
"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(fmt.Sprintf("%v", at.data))
|
|
}
|
|
|
|
// 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() {
|
|
|
|
}
|