Go每日一库之130:go-humanize(人性化显示)

发布时间 2023-09-29 21:10:23作者: 阿瑞娜

go-humanize是一个「人性化」的Go语言库,人性化的意思不是形容这个Go语言库,而是这个Go语言库实现的功能,它可以把数字、时间、容量等转换为我们人类容易理解的词语,比如硬盘的容量是 82854982 bytes ,我们可不太好理解,但是如果说容量是 83M ,那就好理解了,go-humanize干的就是这个事情。

安装使用

这个部分简单过一下,大家都清楚的,首先通过 go get 命令获取这个Go语言库

go get github.com/dustin/go-humanize

然后使用 import 导入 "github.com/dustin/go-humanize" 就可以使用了。

容量尺寸转换

比如刚刚硬盘的例子,就可以很容使用 humanize.Bytes 函数转化:

fmt.Printf("That file is %s.", humanize.Bytes(82854982)) 
// That file is 83 MB. 

可以把这么一长串的字节数字转换为我们容易理解的83MB。但是它能做的可不止转为 MB 还可以是KB、GB等,会根据字节的大小选择最合适的单位。

fmt.Printf("That file is %s.", humanize.Bytes(82854982000)) 
// That file is 83 GB. 

加3个0,就是GB了。

时间转换

时间的转换也是一样,如果一个时间换成 3分钟之前 、 3天之前 会比干巴巴的绝对时间更容易理解,使用 humanize.Time 函数就可以搞定

fmt.Printf("This was touched %s.", humanize.Time(someTimeInstance))  
// This was touched 7 hours ago. 

这个函数和 humanize.Bytes 是一样的,它也会根据相对的时间,转换为 xxx分钟前 xxx小时前 或者 xxx 天前 等等。

千分位

我们在处理金额的时候,如果使用千分位,也就是逗号分隔,会更容易阅读,humanize 也提供了这一功能。

fmt.Printf("You owe ¥%s.\n", humanize.Comma(6582491))  
// You owe ¥6,582,491. 

它的处理方式如下所示:

0 -> 0 
100 -> 100 
1000 -> 1,000 
1000000000 -> 1,000,000,000 
-100000 -> -100,000 

小结

这个库还提供其他的功能,比如格式化浮点数字,可以去除多余的零,比如可以按因为显示顺序,表示第xxx个,这些你可以自己学习使用,这里不再介绍。