This commit is contained in:
2026-05-01 11:42:00 +08:00
parent 01e5af3a0f
commit b3565ac6d7

View File

@@ -1,19 +1,67 @@
package conv package conv
import ( import (
"encoding/json"
"fmt"
"reflect" "reflect"
"strconv" "strconv"
) )
// AnyToString 任意类型转字符串 // AnyToString 任意值转为可读的字符串nil 为空串;标量与 []byte 用 strconv指针会解引用其余走 fmt.Sprint。
// in: 输入值 func AnyToString(in any) string {
// 返回: 转换后的字符串 for in != nil {
func AnyToString(in any) (s string) { rv := reflect.ValueOf(in)
if rv.Kind() != reflect.Ptr {
break
}
if rv.IsNil() {
return ""
}
in = rv.Elem().Interface()
}
if in == nil { if in == nil {
return "" return ""
} }
return in.(string) switch v := in.(type) {
case string:
return v
case []byte:
return string(v)
case bool:
return strconv.FormatBool(v)
case int:
return strconv.Itoa(v)
case int8:
return strconv.FormatInt(int64(v), 10)
case int16:
return strconv.FormatInt(int64(v), 10)
case int32:
return strconv.FormatInt(int64(v), 10)
case int64:
return strconv.FormatInt(v, 10)
case uint:
return strconv.FormatUint(uint64(v), 10)
case uint8:
return strconv.FormatUint(uint64(v), 10)
case uint16:
return strconv.FormatUint(uint64(v), 10)
case uint32:
return strconv.FormatUint(uint64(v), 10)
case uint64:
return strconv.FormatUint(v, 10)
case float32:
return strconv.FormatFloat(float64(v), 'f', -1, 32)
case float64:
return strconv.FormatFloat(v, 'f', -1, 64)
case json.Number:
return string(v)
default:
if s, ok := in.(fmt.Stringer); ok {
return s.String()
}
return fmt.Sprint(in)
}
} }
// AnyToInt 将动态类型转为 int两仓库 internal 中逻辑一致,此处合并分支)。 // AnyToInt 将动态类型转为 int两仓库 internal 中逻辑一致,此处合并分支)。