cvtGo 任意数据类型安全转换

联合创作 · 2023-09-28 10:01

cvt 是一个简单、安全、高效的转换任意数据类型的 Go 语言工具包,支持自定义类型、提取结构体字段和值。

安装

go get -u github.com/shockerli/cvt

使用

支持 error

 E 结尾的方法 __E(): 当转换失败时会返回错误

cvt.IntE("12")          // 12, nil
cvt.Float64E("12.34")   // 12.34, nil
cvt.StringE(12.34)      // "12.34", nil
cvt.BoolE("false")      // false, nil

自定义类型、指针类型

自动解引用,并找到基本类型,完全支持自定义类型的转换

type Name string

var name Name = "jioby"

cvt.StringE(name)       // jioby, nil
cvt.StringE(&name)      // jioby, nil

忽略 error

名称不以 E 结尾的方法,如果转换失败,不会返回错误,会返回零值

cvt.Int("12")           // 12(success)
cvt.Int(struct{}{})     // 0(failed)

默认值

如果转换失败,返回默认值

cvt.Int(struct{}{}, 12)         // 12
cvt.Float("hello", 12.34)       // 12.34

更多示例

上千个单元测试用例,覆盖率近100%,所有示例可通过单元测试了解:*_test.go

API

bool

  • Bool
  • BoolE

int

  • Int
  • IntE
  • Int8
  • Int8E
  • Int16
  • Int16E
  • Int32
  • Int32E
  • Int64
  • Int64E
  • Uint
  • UintE
  • Uint8
  • Uint8E
  • Uint16
  • Uint16E
  • Uint32
  • Uint32E
  • Uint64
  • Uint64E

string

  • String
  • StringE

float

  • Float32
  • Float32E
  • Float64
  • Float64E

time

  • Time
  • TimeE

slice

  • ColumnsE: 类似于 PHP 中的 array_columnFieldE 函数的切片版本,返回 []interface{}
  • FieldE: 取 map  struct 的字段值,返回 interface{}
  • KeysE: 取 map 的键名,返回 []interface{}
  • Slice / SliceE: 转换成 []interface{}
  • SliceIntE: 转换成 []int
  • SliceInt64E: 转换成 []int64
  • SliceFloat64E: 转换成 []float64
  • SliceStringE: 转换成 []string
浏览 18
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报