Published on

golang用于数据类型转换的三方库有哪些

Authors
  • avatar
    Name
    刘十三
    Twitter

ChatGPT:

在 Go 里做数据类型转换时,标准库本身已经提供了不少工具(strconvencoding/jsonfmt.Sscanfreflect 等),但如果你想用三方库来简化或者增强类型转换,社区也有一些成熟方案。常见的 Go 第三方库有:


🔹 常用三方库

  1. spf13/cast

    • ⭐ 非常流行,常用于配置解析(如 Viper)
    • 功能:提供 ToIntToStringToBoolToTime 等简洁函数
    • 特点:简单直接,处理常见类型转换时足够好用
    import "github.com/spf13/cast"
    
    i := cast.ToInt("123")         // 123
    s := cast.ToString(123)        // "123"
    b := cast.ToBool("true")       // true
    

  1. mitchellh/mapstructure

    • ⭐ 常用于将 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)
    

  1. jinzhu/copier

    • ⭐ 常用于 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)
    

  1. mergo

    • ⭐ 更偏向于 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
    

  1. guregu/null

    • ⭐ 专门处理数据库里的 NULL 值与 Go 类型的转换
    • 功能:封装 sql.NullString / sql.NullInt64 等,转 JSON 时更友好

  1. 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)示例对比表,这样你直接就能挑库用了?