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

参考

相关推荐
winks32 分钟前
Spring Task的使用
java·后端·spring
Null箘3 分钟前
从零创建一个 Django 项目
后端·python·django
秋意钟13 分钟前
Spring新版本
java·后端·spring
小蜗牛慢慢爬行33 分钟前
有关异步场景的 10 大 Spring Boot 面试问题
java·开发语言·网络·spring boot·后端·spring·面试
A小白59081 小时前
Docker部署实践:构建可扩展的AI图像/视频分析平台 (脱敏版)
后端
goTsHgo1 小时前
在 Spring Boot 的 MVC 框架中 路径匹配的实现 详解
spring boot·后端·mvc
waicsdn_haha1 小时前
Java/JDK下载、安装及环境配置超详细教程【Windows10、macOS和Linux图文详解】
java·运维·服务器·开发语言·windows·后端·jdk
Q_19284999061 小时前
基于Spring Boot的摄影器材租赁回收系统
java·spring boot·后端
良许Linux1 小时前
0.96寸OLED显示屏详解
linux·服务器·后端·互联网
求知若饥2 小时前
NestJS 项目实战-权限管理系统开发(六)
后端·node.js·nestjs