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 还有一些格式化的函数,感兴趣的读者可以自行查看源码。

参考

相关推荐
两点王爷4 小时前
SpringBoot 项目集成 GeoServer 源码,实现地图服务发布
java·spring boot·后端
leoZ2315 小时前
2026-09-09-springboot-cloud-deploy-pitfalls
java·前端·javascript·vue.js·人工智能·spring boot·后端
海上彼尚6 小时前
Cursor 模型的强度实测排行
前端·人工智能·后端
GoGeekBaird7 小时前
从「跑完即销毁」到「用完再销毁」:云沙箱的一次进化
后端·github·ai编程
孫治AllenSun8 小时前
【LangChain4J-09】开发学习知识点
spring boot·后端·学习
lisin-lee-cooper8 小时前
简单聊聊 Spring 框架源码
java·后端·spring
复方金银花颗粒8 小时前
reactor和proactor的好处和坏处。为什么要用reactor而不用 proactor?
后端·信号处理
IT_陈寒9 小时前
JavaScript的这个隐式转换特性差点让我加班到凌晨
前端·人工智能·后端
用户8356290780519 小时前
使用 Python 在 Excel 中添加和编辑形状
后端·python