- Published on
golang用于数据类型转换的三方库有哪些
- Authors
- Name
- 刘十三
ChatGPT:
在 Go 里做数据类型转换时,标准库本身已经提供了不少工具(strconv
、encoding/json
、fmt.Sscanf
、reflect
等),但如果你想用三方库来简化或者增强类型转换,社区也有一些成熟方案。常见的 Go 第三方库有:
🔹 常用三方库
- ⭐ 非常流行,常用于配置解析(如 Viper)
- 功能:提供
ToInt
、ToString
、ToBool
、ToTime
等简洁函数 - 特点:简单直接,处理常见类型转换时足够好用
import "github.com/spf13/cast" i := cast.ToInt("123") // 123 s := cast.ToString(123) // "123" b := cast.ToBool("true") // true
- ⭐ 常用于将
map[string]interface{}
转换为 struct - 功能:支持标签(
mapstructure:"field_name"
),复杂嵌套解析 - 特点:和 JSON/配置解析结合使用场景多
import "github.com/mitchellh/mapstructure" type Person struct { Name string Age int } var m = map[string]interface{}{ "Name": "Tom", "Age": 30, } var p Person _ = mapstructure.Decode(m, &p)
- ⭐ 常用于将
- ⭐ 常用于 struct ↔ struct 的字段复制和转换
- 功能:自动匹配相同字段名,支持 tag 定义
- 特点:比反射手写安全和方便,适合 DTO ↔ Entity 转换
import "github.com/jinzhu/copier" type User struct { Name string Age int } type UserDTO struct { Name string Age int } var u = User{Name: "Tom", Age: 20} var dto UserDTO _ = copier.Copy(&dto, &u)
- ⭐ 更偏向于 struct/map 合并,但也能做默认值填充、数据类型兼容处理
- 特点:配置合并、默认值注入时非常常用
import "github.com/imdario/mergo" type Config struct { Port int } defaultCfg := Config{Port: 8080} customCfg := Config{} _ = mergo.Merge(&customCfg, defaultCfg) // customCfg.Port = 8080
- ⭐ 专门处理数据库里的 NULL 值与 Go 类型的转换
- 功能:封装
sql.NullString
/sql.NullInt64
等,转 JSON 时更友好
go-playground/validator
(间接类型处理)- ⭐ 虽然主要做数据校验,但在 struct ↔ 基础类型映射中也常用
- 场景:表单解析后先用
mapstructure
/json
转换,再用 validator 校验
👉 总结:
- 简单类型转换 →
spf13/cast
- map ↔ struct 转换 →
mapstructure
- struct ↔ struct 拷贝 →
copier
- 配置合并/默认值填充 →
mergo
- 数据库 NULL 处理 →
guregu/null
要不要我帮你整理一个 常用类型转换场景(string ↔ int, map ↔ struct, struct ↔ struct)示例对比表,这样你直接就能挑库用了?