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

参考

相关推荐
风象南2 小时前
SpringBoot Jar包冲突在线检测
后端
程序员爱钓鱼2 小时前
Go语言实战案例 — 项目实战篇:任务待办清单 Web 应用
后端·google·go
Cyan_RA94 小时前
SpringMVC @RequestMapping的使用演示和细节 详解
java·开发语言·后端·spring·mvc·ssm·springmvc
用户214118326360212 小时前
Qwen3-Coder 实战!历史人物短视频一键生成,多分镜人物不崩,魔搭直接玩
后端
追逐时光者12 小时前
C#/.NET/.NET Core技术前沿周刊 | 第 54 期(2025年9.8-9.14)
后端·.net
追逐时光者12 小时前
C#/.NET/.NET Core编程技巧练习集,配套详细的文章教程讲解!
后端·.net
AD钙奶-lalala13 小时前
SpringBoot实现WebSocket服务端
spring boot·后端·websocket
moxiaoran575313 小时前
Flask学习笔记(一)
后端·python·flask
你的人类朋友13 小时前
🔒什么是HMAC
后端·安全·程序员
盖世英雄酱5813614 小时前
Read timed out问题 排查
java·数据库·后端