完善数据类型转换

This commit is contained in:
Yun
2026-05-27 22:02:17 +08:00
parent 3fb090a620
commit 614ac34883
7 changed files with 1352 additions and 104 deletions
+53 -15
View File
@@ -31,15 +31,20 @@ var (
reflect.Slice: convertSlice,
reflect.Array: convertArray,
reflect.Map: convertMap,
reflect.Interface: convertInterface,
}
)
// 转换为字符串
func convertToString(item interface{}) string {
if str, ok := item.(string); ok {
return str
switch v := item.(type) {
case string:
return v
case json.Number:
return string(v)
default:
return fmt.Sprintf("%v", item)
}
return fmt.Sprintf("%v", item)
}
// 转换为数字(float64
@@ -47,10 +52,28 @@ func convertToFloat64(item interface{}) (float64, error) {
switch v := item.(type) {
case float64:
return v, nil
case int, int32, int64:
return float64(reflect.ValueOf(v).Int()), nil
case uint, uint32, uint64:
return float64(reflect.ValueOf(v).Uint()), nil
case json.Number:
return v.Float64()
case int:
return float64(v), nil
case int8:
return float64(v), nil
case int16:
return float64(v), nil
case int32:
return float64(v), nil
case int64:
return float64(v), nil
case uint:
return float64(v), nil
case uint8:
return float64(v), nil
case uint16:
return float64(v), nil
case uint32:
return float64(v), nil
case uint64:
return float64(v), nil
case float32:
return float64(v), nil
default:
@@ -125,25 +148,40 @@ func convertString(field reflect.Value, value string) (interface{}, error) {
}
func convertSlice(field reflect.Value, value string) (interface{}, error) {
var result []interface{}
if err := json.Unmarshal([]byte(value), &result); err != nil {
sliceType := field.Type()
result := reflect.New(sliceType).Elem()
if err := json.Unmarshal([]byte(value), result.Addr().Interface()); err != nil {
return nil, err
}
return result, nil
return result.Interface(), nil
}
func convertArray(field reflect.Value, value string) (interface{}, error) {
var result []interface{}
arrayType := field.Type()
result := reflect.New(arrayType).Elem()
if err := json.Unmarshal([]byte(value), result.Addr().Interface()); err != nil {
return nil, err
}
return result.Interface(), nil
}
func convertMap(field reflect.Value, value string) (interface{}, error) {
mapType := field.Type()
result := reflect.New(mapType).Elem()
if err := json.Unmarshal([]byte(value), result.Addr().Interface()); err != nil {
return nil, err
}
return result.Interface(), nil
}
func convertInterface(field reflect.Value, value string) (interface{}, error) {
var result interface{}
if err := json.Unmarshal([]byte(value), &result); err != nil {
return nil, err
}
return result, nil
}
func convertMap(field reflect.Value, value string) (interface{}, error) {
return nil, fmt.Errorf("map转换未实现")
}
func getBaseTypeFromAlias(aliasType reflect.Type) reflect.Type {
if aliasType.Kind() == reflect.Ptr {
aliasType = aliasType.Elem()