package
0.0.0-20210310035445-5a72c2010943
Repository: https://github.com/vgmdj/utils.git
Documentation: pkg.go.dev
# README
chars
常用字符处理包,详细例子可以参见相应 _test.go 文件
格式转换
-
ToString(num interface{}, ...prec) 将任意类型转换为string类型,第二个参数是精度,可以控制小数点后位数,整数情况下,不保留小数, 浮点数情况下,默认保留2位小数,也可以设置为保留4位,如1.555555,精度为4,转换为"1.5555"
如果传入的值为string类型,且没有设置精度,则直接返回,如: 不设置精度情况下,ToString(".5555"),则返回“.5555”,而ToString(".5555",4),则返回"0.5555"
-
ToInt(num interface{}) 将任意类型转换为int类型,直接舍弃小数部分
放大缩小
将任意格式数字,放大n倍,并返回指定格式类型
缩小时,会默认按照倍数进行小数点位数的保留,如10倍,就是一位小数,1000倍就是三位小数
也可以强制指定保留位数,就是在ToString()时,加入精度参数
chars.NewConversion("2.342",1000).ZoomOut().ToInt() //2342
chars.NewConversion(2342,100).ZoomIn().ToString() //23.42
chars.NewConversion(2342,100).ZoomIn().ToString(1) //23.4
数组处理
-
判断元素是否存在 传入任意类型数组,任意类型元素,若数组中包含相同类型,相同值的元素,则返回true,否则返回false
ast := assert.New(t) var array1 []interface{} array1 = append(array1,"a") array1 = append(array1,1) t1 := "a" ast.Equal(true,IsContain(array1,t1)) t2 := 1.23 ast.Equal(false,IsContain(array1,t2)) array2 := []string{"1","2","a","b"} t3 := 1 ast.Equal(false,IsContain(array2,t3)) t4 := "1" ast.Equal(true,IsContain(array2,t4))
ID生成
可以使用uuid生成方式,同时指定是否保留"-",也可以使用bson objectid的生成方式
chars.NewUUID(false) //生成不带"-" 的uuid
chars.NewBsonID() //生成BsonID
time 时间相关计算
-
计算下一个零点,有时,我们需要在零点来更新一些东西,这时,就需要计算出当前离下一个零点还有多长时间
chars.Time24Sub(time.Now())
-
营业时间计算 有时,我们需要在一些接口的营业时间进行调用,非营业时间则进行等待。
//设置休息时间为 22:50 - 0:50, 由于中间隔了一个零点,所以crossMidNight 为true rt := RestTime(22, 50, 0, 50, true) t := time.Date(2018, time.July, 1, 23, 55, 0, 0, time.UTC) //设置额外等待时间为30秒 rt.SetExtWaitTime(time.Second*30) rt.IsWorkingTime(t) // false rt.IsRestTime(t) // true rt.WaitTime(t) // 所需等待时间为 56分钟30秒
身份证解析
身份证号上有着大量的个人信息,可以通过 chars.ParseIDCard("xxxxxxxxxx") 来进行解析
- 可以判断是否是符合格式身份证,即通过最后一位校验位,来检验身份证号是否正确
- 可以判断出男,女
- 可以获取出生日期
- 可以判断出生地,出生地默认使用出生时那年发布的GB2260行政区划对应表,范围在1986-2018,因每年调整次数可能不止一次,这里查询使用的是最后一次发布的信息对应表,所以可能存在些许误差
编码
GBK转UTF8等