项目中,我们经常会遇到一些单位转换的场景。
比如:Go 的 os.Stat 返回的大小是 byte 为单位的,在某些时候我们就需要对这个单位进行 M 或者 G 单位的转换。
其他的还有时间的转换,千分位的转换。
今天这就给他家推荐一个库,让你不再为这些转换而烦恼。
库的 github 地址:github.com/dustin/go-humanize
start 的数量还算可以。
安装的话,直接 go get 即可:
go get github.com/dustin/go-humanize
直接上代码吧:
info,_ := os.Stat("./main.go")
// 打印 byte
fmt.Println(info.Size())
// 使用 humanize 转换
fmt.Println(humanize.Bytes(uint64(info.Size())))
这里库的 humanize.Bytes 方法,会返回一个计算后的带单位的字符串,比如 B M G T 这种:
508
508 B
我们经常可以看到某篇文章,或者某条评论发布于多久之前。
这个库也是支持的。
fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
SubmitTime,_ := time.Parse("2006-01-02 15:04:05","2021-10-11 09:03:03")
fmt.Println(humanize.Time(SubmitTime))
看下输出结果吧:
2021-10-11 10:28:58
6 hours from now
细心的朋友可能发现了,他的计算结果好像相差 8 个小时,没错,我也发现了,但是我看了下他的文档并没有提供设置时区的地方。
这或许是一个坑,等作者们后期修复吧。
你或许在 ATM 机上取过钱吧,当你输完密码,看到的余额是不是隔几位就有一个逗号,这就是千分位。
直接上代码:
fmt.Println(humanize.Commaf(float64(10000000)))
它会给我们转化成这样:
10,000,000
这要是我卡上的数字该多好,哈哈。
到这里就结束了,这个库还支持其他的转换,感兴趣的可以去看他的 API,地址如下:
https://pkg.go.dev/github.com/dustin/go-humanize
我们最常用的可能就上面三种转换场景,如果你们有好的库要推荐也欢迎给我们留言,谢谢!