Documentation
¶
Index ¶
- Variables
- func Deserialize[T any](data []byte) (T, error)
- func DeserializeAny(data []byte) (any, error)
- func Diff(oldDatas, newDatas []map[string]interface{}, key string) (newData, updateData, delData []map[string]interface{})
- func FormatTime(value interface{}, layout string) string
- func FormatTimeE(value interface{}, layout string) (string, error)
- func FromJson[T any](b string) *T
- func FromJson2[T any](b json.RawMessage) *T
- func FromJson2E[T any](b json.RawMessage) (*T, error)
- func FromJsonE[T any](b string) (*T, error)
- func GetBool(m map[string]interface{}, key string, igoreCase ...bool) bool
- func GetBoolE(m map[string]interface{}, key string, igoreCase ...bool) (bool, error)
- func GetFloat(m map[string]interface{}, key string, igoreCase ...bool) float64
- func GetFloatE(m map[string]interface{}, key string, igoreCase ...bool) (float64, error)
- func GetInt(m map[string]interface{}, key string, igoreCase ...bool) int
- func GetInt64(m map[string]interface{}, key string, igoreCase ...bool) int64
- func GetInt64E(m map[string]interface{}, key string, igoreCase ...bool) (int64, error)
- func GetIntE(m map[string]interface{}, key string, igoreCase ...bool) (int, error)
- func GetStr(m map[string]interface{}, key string, igoreCase ...bool) string
- func GetStrE(m map[string]interface{}, key string, igoreCase ...bool) (string, error)
- func GetStructFieldTags[T any](tagName string, tagKey ...string) ([]string, error)
- func GetVal[T any](m map[string]interface{}, key string, igoreCase ...bool) T
- func GetValue(m map[string]interface{}, keys []string, ignoreCase ...bool) (interface{}, error)
- func IsDigits(s string) bool
- func MD5(params ...interface{}) string
- func MergeMaps(m1 ...map[string]interface{}) map[string]interface{}
- func NewObj[T any]() (T, bool)
- func Ptr[T any](v T) *T
- func Serialize[T any](v T) ([]byte, error)
- func SerializeAny(v any) ([]byte, error)
- func SetValue(m map[string]interface{}, keys []string, value interface{}) (bool, error)
- func SliceContains(slice []string, item string, ignoreCase ...bool) bool
- func SliceToAny[T any](s []T) []any
- func ToBool(value interface{}) bool
- func ToBoolE(value interface{}) (bool, error)
- func ToFloat64(value interface{}) float64
- func ToFloat64E(value interface{}) (float64, error)
- func ToInt(value interface{}) int
- func ToInt64(value interface{}) int64
- func ToInt64E(value interface{}) (int64, error)
- func ToIntE(value interface{}) (int, error)
- func ToJson[T any](d T) string
- func ToJson2[T any](d T) json.RawMessage
- func ToJson2E[T any](d T) (json.RawMessage, error)
- func ToJsonE[T any](d T) (string, error)
- func ToStr(value any) string
- func ToStrE(value interface{}) (string, error)
- func ToTime(value interface{}) time.Time
- func ToTimeE(value interface{}) (time.Time, error)
- type MultiLineString
Constants ¶
This section is empty.
Variables ¶
var ToString = ToStr
Functions ¶
func Deserialize ¶
Deserialize 使用 gob 解码将字节数组反序列化为类型 T 的值。 这是一个泛型函数,需要在编译时指定目标类型。
注意:
- Deserialize[T] 只能反序列化 Serialize[T] 生成的数据
- 不能反序列化 SerializeAny 生成的数据(数据格式不兼容)
- T 可以是值类型(Person)或指针类型(*Person)
参数:
- data: 要反序列化的字节数组(由 Serialize[T] 生成)
返回值:
- T: 反序列化后的值
- error: 如果反序列化失败返回错误
示例:
type User struct { Name string; Age int }
data, _ := Serialize(User{Name: "Alice", Age: 30})
user, err := Deserialize[User](data)
fmt.Println(user.Name, user.Age) // Alice 30
func DeserializeAny ¶
DeserializeAny 反序列化 SerializeAny 生成的数据。 会根据数据中的类型信息和复杂类型标志进行反序列化。
返回值类型:
- 基础类型:返回原始类型(int, string, bool, []int, []string 等)
- 复杂类型:返回 map[string]any(struct、map)或 []any(复杂切片)
重要限制:
- DeserializeAny 只能反序列化 SerializeAny 生成的数据
- 不能反序列化 Serialize[T] 生成的数据(数据格式不兼容)
- 复杂类型无法恢复原始类型,需要手动转换
- JSON 转换导致的类型变化:数字变成 float64
参数:
- data: 要反序列化的字节数组(由 SerializeAny 生成)
返回值:
- any: 反序列化后的值
- error: 如果反序列化失败返回错误
示例:
// 基础类型
data, _ := SerializeAny(42)
result, _ := DeserializeAny(data)
fmt.Printf("%v (%T)\n", result, result) // 42 (int)
// 复杂类型
type Person struct { Name string; Age int }
data, _ := SerializeAny(Person{Name: "Alice", Age: 30})
result, _ := DeserializeAny(data)
m := result.(map[string]any)
fmt.Println(m["Name"], m["Age"]) // Alice 30 (注意:Age 是 float64)
func FormatTime ¶
FormatTime 将任意类型转换为指定格式的时间字符串,失败返回空字符串。
参数:
- value: 需要转换的值(支持 time.Time、string、int、int64、float64 等)
- layout: 时间格式(如 "2006-01-02 15:04:05")
返回值:
- string: 格式化后的时间字符串,失败返回空字符串
特点:
- 支持多种输入类型自动转换
- 失败时返回空字符串(不返回错误)
- 支持指针类型
使用示例:
- FormatTime(time.Now(), "2006-01-02") → "2024-01-15"
- FormatTime(int64(1700000000), "2006-01-02 15:04:05") → "2023-11-15 06:13:20"
- FormatTime("2024-01-15", "2006-01-02") → "2024-01-15"
func FormatTimeE ¶
FormatTimeE 将任意类型转换为指定格式的时间字符串,返回错误。
参数:
- value: 需要转换的值(支持 time.Time、string、int、int64、float64 等)
- layout: 时间格式(如 "2006-01-02 15:04:05")
返回值:
- string: 格式化后的时间字符串
- error: 如果转换或格式化失败返回错误
特点:
- 支持多种输入类型自动转换
- 返回详细的错误信息
- 支持指针类型
使用示例:
- FormatTimeE(time.Now(), "2006-01-02")
- FormatTimeE(int64(1700000000), "2006-01-02 15:04:05")
- FormatTimeE("2024-01-15", "2006-01-02")
func FromJson2 ¶
func FromJson2[T any](b json.RawMessage) *T
func FromJson2E ¶
func FromJson2E[T any](b json.RawMessage) (*T, error)
func GetBool ¶
GetBool 从 Map 中获取布尔值。
参数:
- m: Map 对象
- key: 键名,支持点号分隔的嵌套访问
- igoreCase: 可选,是否忽略大小写
返回值:
- bool: 获取到的布尔值,不存在或为 nil 返回 false
用法:
data := map[string]interface{}{"active": true}
active := GetBool(data, "active") // true
func GetBoolE ¶
GetBoolE 从 Map 中获取布尔值,返回错误。
参数:
- m: Map 对象
- key: 键名,支持点号分隔的嵌套访问
- igoreCase: 可选,是否忽略大小写
返回值:
- bool: 获取到的布尔值
- error: 如果键不存在或转换失败返回错误
func GetFloat ¶
GetFloat 从 Map 中获取浮点数值。
参数:
- m: Map 对象
- key: 键名,支持点号分隔的嵌套访问
- igoreCase: 可选,是否忽略大小写
返回值:
- float64: 获取到的浮点数值,不存在或为 nil 返回 0
用法:
data := map[string]interface{}{"price": 99.99}
price := GetFloat(data, "price") // 99.99
func GetFloatE ¶
GetFloatE 从 Map 中获取浮点数值,返回错误。
参数:
- m: Map 对象
- key: 键名,支持点号分隔的嵌套访问
- igoreCase: 可选,是否忽略大小写
返回值:
- float64: 获取到的浮点数值
- error: 如果键不存在或转换失败返回错误
func GetInt ¶
GetInt 从 Map 中获取整数值。
参数:
- m: Map 对象
- key: 键名,支持点号分隔的嵌套访问
- igoreCase: 可选,是否忽略大小写
返回值:
- int: 获取到的整数值,不存在或为 nil 返回 0
用法:
data := map[string]interface{}{"count": 42, "user": map[string]interface{}{"id": 123}}
count := GetInt(data, "count") // 42
id := GetInt(data, "user.id") // 123
func GetInt64 ¶
GetInt64 从 Map 中获取 int64 值。
参数:
- m: Map 对象
- key: 键名,支持点号分隔的嵌套访问
- igoreCase: 可选,是否忽略大小写
返回值:
- int64: 获取到的 int64 值,不存在或为 nil 返回 0
用法:
data := map[string]interface{}{"id": int64(9223372036854775807)}
id := GetInt64(data, "id")
func GetInt64E ¶
GetInt64E 从 Map 中获取 int64 值,返回错误。
参数:
- m: Map 对象
- key: 键名,支持点号分隔的嵌套访问
- igoreCase: 可选,是否忽略大小写
返回值:
- int64: 获取到的 int64 值
- error: 如果键不存在或转换失败返回错误
func GetIntE ¶
GetIntE 从 Map 中获取整数值,返回错误。
参数:
- m: Map 对象
- key: 键名,支持点号分隔的嵌套访问
- igoreCase: 可选,是否忽略大小写
返回值:
- int: 获取到的整数值
- error: 如果键不存在或转换失败返回错误
func GetStr ¶
GetStr 从 Map 中获取字符串值。
参数:
- m: Map 对象
- key: 键名,支持点号分隔的嵌套访问(如 "user.name")
- igoreCase: 可选,是否忽略大小写
返回值:
- string: 获取到的字符串值,不存在或为 nil 返回空字符串
用法:
data := map[string]interface{}{"name": "John", "user": map[string]interface{}{"age": 30}}
name := GetStr(data, "name") // "John"
age := GetStr(data, "user.age") // "30"
missing := GetStr(data, "missing") // ""
局限:
- 嵌套访问使用点号分隔
- 不存在的键返回空字符串
func GetStrE ¶
GetStrE 从 Map 中获取字符串值,返回错误。
参数:
- m: Map 对象
- key: 键名,支持点号分隔的嵌套访问
- igoreCase: 可选,是否忽略大小写
返回值:
- string: 获取到的字符串值
- error: 如果键不存在返回错误
用法:
data := map[string]interface{}{"name": "John"}
name, err := GetStrE(data, "name")
if err != nil {
log.Fatal(err)
}
func GetStructFieldTags ¶
GetStructFieldTags 提取结构体字段上的指定标签。
用法:
type User struct {
ID int `db:"id"`
Name string `db:"name;comment:用户名"`
CommonFields
}
tags, _ := GetStructFieldTags[User]("db") // []string{"id", "name;comment:用户名", ...}
comments, _ := GetStructFieldTags[User]("db", "comment") // []string{"用户名", ...}
局限:
- T 必须是 struct 或 *struct;其他类型会返回错误。
- 仅扫描匿名嵌入字段;普通字段中的自定义 struct 不会递归深入。
- tagKey 仅返回 tag 内指定 key 的第一段值,复杂解析需要自行处理。
func GetVal ¶
GetVal 从 Map 中获取泛型类型的值。
参数:
- m: Map 对象
- key: 键名,支持点号分隔的嵌套访问
- igoreCase: 可选,是否忽略大小写
返回值:
- T: 获取到的值,类型为 T
用法:
data := map[string]interface{}{"count": 42}
count := GetVal[int](data, "count") // 42
局限:
- 必须提供正确的类型参数
- 类型转换失败时会 panic
func GetValue ¶
GetValue 从 Map 中获取值,支持嵌套路径。
参数:
- m: 源 Map
- keys: 键路径数组(如 []string{"user", "name"})
- ignoreCase: 可选,是否忽略大小写
返回值:
- interface{}: 获取到的值
- error: 如果路径不存在返回错误
用法:
data := map[string]interface{}{"user": map[string]interface{}{"name": "John"}}
val, err := GetValue(data, []string{"user", "name"})
// val = "John"
特点:
- 支持任意深度的嵌套
- 支持忽略大小写查找
- 路径不存在时返回错误
func IsDigits ¶
IsDigits 检查字符串是否全由数字组成。
参数:
- s: 需要检查的字符串
返回值:
- bool: 全为数字返回 true,否则返回 false
用法:
if IsDigits("12345") {
fmt.Println("All digits")
}
if !IsDigits("123a45") {
fmt.Println("Contains non-digit")
}
局限:
- 空字符串返回 false
- 只检查 Unicode 数字字符
func MergeMaps ¶
MergeMaps 合并多个 Map。
参数:
- m1: 可变参数,多个 Map 对象
返回值:
- map[string]interface{}: 合并后的 Map
用法:
m1 := map[string]interface{}{"a": 1}
m2 := map[string]interface{}{"b": 2}
merged := MergeMaps(m1, m2) // {"a": 1, "b": 2}
特点:
- 后面的 Map 会覆盖前面的相同键
- 空参数返回 nil
- 单个参数直接返回该 Map
func NewObj ¶
NewObj 创建指针类型的新对象。
返回值:
- T: 新创建的指针对象
- bool: 是否成功创建(T 必须是指针类型)
用法:
type User struct {
Name string
}
user, ok := NewObj[*User]()
if ok {
user.Name = "John"
}
- T 是指针类型,返回 true
func Ptr ¶
func Ptr[T any](v T) *T
Ptr 获取值的指针。
参数:
- v: 需要获取指针的值
返回值:
- *T: 值的指针
用法:
value := 42 ptr := Ptr(value) fmt.Println(*ptr) // 42
局限:
- 返回的指针指向新创建的值,不是原始值的指针
func Serialize ¶
Serialize 使用 gob 编码将类型 T 的值序列化为字节数组。 这是一个泛型函数,适用于类型已知的场景。
注意:
- Serialize 生成的数据只能用 Deserialize[T] 反序列化
- 不能与 SerializeAny/DeserializeAny 混用
- 适用于类型安全的场景
参数:
- v: 要序列化的值(类型 T)
返回值:
- []byte: 序列化后的字节数组
- error: 如果序列化失败返回错误
示例:
type User struct { Name string; Age int }
data, err := Serialize(User{Name: "Alice", Age: 30})
user, err := Deserialize[User](data)
func SerializeAny ¶
SerializeAny 序列化任意类型的值,并在数据中包含类型信息。 对于复杂类型(struct、map、复杂切片),会先通过 JSON 转换成 map[string]any 或 []any。
数据格式:[类型名长度(4字节)] + [类型名] + [复杂类型标志(1字节)] + [gob数据]
重要限制:
- SerializeAny 生成的数据只能用 DeserializeAny 反序列化
- 不能与 Serialize[T]/Deserialize[T] 混用(数据格式不兼容)
- 复杂类型会丢失原始类型信息,反序列化后变成 map[string]any 或 []any
- JSON 转换会导致数字变成 float64,私有字段丢失
参数:
- v: 要序列化的值(任意类型)
返回值:
- []byte: 序列化后的字节数组(包含类型信息)
- error: 如果序列化失败返回错误
示例:
// 基础类型
data, _ := SerializeAny(42)
result, _ := DeserializeAny(data) // result: 42 (int)
// 复杂类型
type Person struct { Name string; Age int }
data, _ := SerializeAny(Person{Name: "Alice", Age: 30})
result, _ := DeserializeAny(data) // result: map[string]any{"Name": "Alice", "Age": 30.0}
func SetValue ¶
SetValue 在 Map 中设置值,支持嵌套路径。
参数:
- m: 目标 Map
- keys: 键路径数组(如 []string{"user", "name"})
- value: 要设置的值
返回值:
- bool: 是否成功设置(值相同时返回 false)
- error: 如果路径中间的键不是 Map 返回错误
用法:
m := make(map[string]interface{})
ok, err := SetValue(m, []string{"user", "name"}, "John")
// m = {"user": {"name": "John"}}
特点:
- 自动创建中间的 Map
- 值相同时返回 false
- 支持任意深度的嵌套
局限:
- 如果中间路径已存在非 Map 值会返回错误
func SliceToAny ¶
SliceToAny 将类型化的切片转换为 []any。
参数:
- s: 源切片
返回值:
- []any: 转换后的 any 切片
用法:
ints := []int{1, 2, 3}
anys := SliceToAny(ints) // []any{1, 2, 3}
func ToBool ¶
func ToBool(value interface{}) bool
ToBool 将值转换为布尔值。
参数:
- value: 需要转换的值
返回值:
- bool: 转换后的布尔值
用法:
b := ToBool("true") // true
b := ToBool(1) // true
b := ToBool(0) // false
func ToFloat64 ¶
func ToFloat64(value interface{}) float64
ToFloat64 将值转换为浮点数。
参数:
- value: 需要转换的值
返回值:
- float64: 转换后的浮点数
用法:
f := ToFloat64("3.14") // 3.14
f := ToFloat64(3) // 3.0
func ToFloat64E ¶
ToFloat64E 将值转换为浮点数,返回错误。
参数:
- value: 需要转换的值
返回值:
- float64: 转换后的浮点数
- error: 如果转换失败返回错误
func ToInt ¶
func ToInt(value interface{}) int
ToInt 将值转换为整数。
参数:
- value: 需要转换的值
返回值:
- int: 转换后的整数
用法:
num := ToInt("123") // 123
num := ToInt(3.14) // 3
num := ToInt(true) // 1
局限:
- 转换失败时返回 0
- 浮点数会被截断
func ToInt64 ¶
func ToInt64(value interface{}) int64
ToInt64 将值转换为 int64。
参数:
- value: 需要转换的值
返回值:
- int64: 转换后的 int64
用法:
num := ToInt64("9223372036854775807")
func ToInt64E ¶
ToInt64E 将值转换为 int64,返回错误。
参数:
- value: 需要转换的值
返回值:
- int64: 转换后的 int64
- error: 如果转换失败返回错误
func ToIntE ¶
ToIntE 将值转换为整数,返回错误。
参数:
- value: 需要转换的值
返回值:
- int: 转换后的整数
- error: 如果转换失败返回错误
用法:
num, err := ToIntE("123")
num, err := ToIntE("invalid") // 返回错误
func ToJson2 ¶
func ToJson2[T any](d T) json.RawMessage
func ToStr ¶
ToStr 将值转换为字符串。
参数:
- value: 需要转换的值
返回值:
- string: 转换后的字符串
用法:
str := ToStr(123) // "123" str := ToStr(3.14) // "3.14" str := ToStr(true) // "true" str := ToStr(nil) // ""
局限:
- Map、Slice、Struct 会转换为 JSON 字符串
- 转换失败时返回 fmt.Sprintf 的结果
func ToTime ¶
ToTime 将值转换为 time.Time。
参数:
- value: 需要转换的值,支持多种格式
返回值:
- time.Time: 转换后的时间对象
用法:
t1 := ToTime("2024-01-15") // 日期字符串
t2 := ToTime("2024-01-15 10:30:45") // 日期时间字符串
t3 := ToTime(int64(1700000000)) // Unix 时间戳(秒)
t4 := ToTime(float64(1700000000.123)) // Unix 时间戳(浮点数)
t5 := ToTime(1700000000) // Unix 时间戳(整数)
t6 := ToTime(time.Now()) // 已是 time.Time
支持的格式:
- time.Time: 直接返回
- 整数/浮点数: 作为 Unix 时间戳(秒数)
- 字符串: 尝试多种时间格式解析
- RFC3339: "2024-01-15T10:30:45Z"
- RFC3339Nano: "2024-01-15T10:30:45.123456Z"
- 日期时间: "2024-01-15 10:30:45"
- 日期: "2024-01-15"
- 时间: "10:30:45"
特点:
- 支持多种时间格式自动识别
- 支持 Unix 时间戳(秒、毫秒、微秒、纳秒)
- 支持浮点数时间戳(自动识别精度)
- 转换失败时返回零值时间
局限:
- 字符串格式不匹配时返回零值
- 无法识别的格式返回零值
func ToTimeE ¶
ToTimeE 将值转换为 time.Time,返回错误。
参数:
- value: 需要转换的值,支持多种格式
返回值:
- time.Time: 转换后的时间对象
- error: 如果转换失败返回错误
用法:
t, err := ToTimeE("2024-01-15")
if err != nil {
log.Fatal(err)
}
支持的格式:
- time.Time: 直接返回
- 整数/浮点数: 作为 Unix 时间戳
- int/int32/int64: 秒数
- float32/float64: 秒数(支持小数)
- 字符串: 尝试多种时间格式解析
- RFC3339: "2024-01-15T10:30:45Z"
- RFC3339Nano: "2024-01-15T10:30:45.123456Z"
- 日期时间: "2024-01-15 10:30:45"
- 日期: "2024-01-15"
- 时间: "10:30:45"
特点:
- 支持多种时间格式自动识别
- 支持 Unix 时间戳(秒、毫秒、微秒、纳秒)
- 支持浮点数时间戳(自动识别精度)
- 详细的错误信息
局限:
- 字符串格式不匹配时返回错误
- 无法识别的格式返回错误
Types ¶
type MultiLineString ¶
type MultiLineString string
func (MultiLineString) MarshalJSON ¶
func (s MultiLineString) MarshalJSON() ([]byte, error)
func (MultiLineString) MarshalYAML ¶
func (s MultiLineString) MarshalYAML() (interface{}, error)
func (*MultiLineString) UnmarshalJSON ¶
func (s *MultiLineString) UnmarshalJSON(data []byte) error
func (*MultiLineString) UnmarshalYAML ¶
func (s *MultiLineString) UnmarshalYAML(value *yaml.Node) error