go humanize介绍

前言

今天在 Github 查看一些开源项目时,发现了一个"人性化"的项目 go-humanize,此项目可以将一些常见的容量、时间、千分位转换为人们可以理解的形式,例如一个文件大小是 2000000 bytes,我们不能很好的理解,但如果告诉你是 2mb,我们就能很好的理解了。 go-humanize 就是方便的将一些不太能快速理解的数字转换为人们可以理解的形式。

安装

使用以下命令安装:

shell 复制代码
go get github.com/dustin/go-humanize

使用

接下来分别介绍一些常见的功能。

容量转换

现在我们有一个文件大小是 52854982 bytes,我们使用 humanize 包的 Bytes 方法将其转换为人们可以理解的形式 53MB,也可以使用IBytes方法转换为MIB单位的值。也可以使用ParseBytes方法将可以理解的形式转换为bytes单位的值。

go 复制代码
	fmt.Printf("That file is %s.\n", humanize.IBytes(52854982)) 
	fmt.Printf("That file is %s.", humanize.Bytes(52854982)) 

时间转换

时间转换与容量转换类型,使用方法十分类似,使用方法如下:

go 复制代码
	t := time.Now().Add(time.Hour * -7)
	fmt.Printf("This was touched %s.", humanize.Time(t)) //This was touched 7 hours ago.

Time 根据相对时间转换为人们可以理解的形式,例如: xx天之前、xx小时之后等形式。

千分位转换

如果我们想在数字中添加逗号,就可以使用 Comma 方法,例如在处理金额时,我们通常会使用逗号将数字分隔开,例如 1,000,000,000

go 复制代码
    	fmt.Printf("num is %s.", humanize.Comma(1000000000)) 

还可以使用 Commaf 方法将浮点数转换为千分位形式。

位序

在日常使用中,我们有时需要表示位序例如 1st、2nd、3rd、4th 等,humanize 包也提供了相应的功能。

go 复制代码
    fmt.Printf("num is %s.", humanize.Ordinal(1000000000))

简单看了下源码,发现函数十分简单:

go 复制代码
func Ordinal(x int) string {
	suffix := "th"
	switch x % 10 {
	case 1:
		if x%100 != 11 {
			suffix = "st"
		}
	case 2:
		if x%100 != 12 {
			suffix = "nd"
		}
	case 3:
		if x%100 != 13 {
			suffix = "rd"
		}
	}
	return strconv.Itoa(x) + suffix
}

小结

本文介绍了 go-humanize 包的一些使用方法,可以方便的将一些数字转换为人们可以理解的形式。go-humanize 还有一些格式化的函数,感兴趣的读者可以自行查看源码。

参考

相关推荐
苏打水com16 分钟前
数据库进阶实战:从性能优化到分布式架构的核心突破
数据库·后端
间彧1 小时前
Spring Cloud Gateway与Kong或Nginx等API网关相比有哪些优劣势?
后端
间彧1 小时前
如何基于Spring Cloud Gateway实现灰度发布的具体配置示例?
后端
间彧1 小时前
在实际项目中如何设计一个高可用的Spring Cloud Gateway集群?
后端
间彧1 小时前
如何为Spring Cloud Gateway配置具体的负载均衡策略?
后端
间彧2 小时前
Spring Cloud Gateway详解与应用实战
后端
EnCi Zheng3 小时前
SpringBoot 配置文件完全指南-从入门到精通
java·spring boot·后端
烙印6013 小时前
Spring容器的心脏:深度解析refresh()方法(上)
java·后端·spring
Lisonseekpan3 小时前
Guava Cache 高性能本地缓存库详解与使用案例
java·spring boot·后端·缓存·guava
4 小时前
JUC专题 - 并发编程带来的安全性挑战之同步锁
后端