首页 > 其他分享 >Go每日一库之130:go-humanize(人性化显示)

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

时间:2023-09-29 21:15:31浏览次数:36  
标签:fmt Bytes 000 一库 130 go Go humanize

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个,这些你可以自己学习使用,这里不再介绍。

标签:fmt,Bytes,000,一库,130,go,Go,humanize
From: https://www.cnblogs.com/arena/p/17737339.html

相关文章

  • Go每日一库之129:promu(Prometheus构建发布工具)
    众所周知,Go语言中打包命令是gobuild。在项目中,你可以单独使用gobuild命令对项目进行编译打包,也可以根据自己的需要,在该命令后加各种参数。prometheus官方为了统一项目(包括prometheus、alertmanager和各种官方的exporter)的编译和打包,开发了promu工具。官方对promu工具......
  • Go每日一库之128:podinfo(k8s微服务模板)
    项目介绍官方Github:PodinfoPodinfo是一个用Go制作的小型web应用程序,它展示了在Kubernetes中运行微服务的最佳实践。它已实现的技术指标(截选自官方README.md):里面每一项技术指标的实现方式,其实都可以拿出来单独讲好久,相关理论也有好多。这里我只是讲针对这个项......
  • Go每日一库之145:MinIO(高性能对象存储)
    1.MinIO简介MinIO是一个基于Go实现的高性能、兼容S3协议的对象存储。它采用GNUAGPLv3开源协议,项目地址是https://github.com/minio/minio,官网是https://min.io。它适合存储海量的非结构化的数据,例如说图片、音频、视频等常见文件,备份数据、容器、虚拟机镜像等等,小......
  • Go每日一库之146:bbs-go(bbs框架)
    概要bbs-go是一款基于Go语言研发的开源、前后端分离、精美小巧、跨平台的社区系统。初期该项目仅用过学习和交流,开源之后越来越多的小伙伴儿开始喜欢和关注他,这也是我长期升级和维护的动力。bbs-go为前后端分离设计,后端接口服务使用简洁的Go语言进行开发,前端页面使用Vue.js进......
  • Go每日一库之144:go-obs-websocket(OBS连接器)
    推荐理由互联网的兴起带动了直播行业的火热,除了少数直播网站有自己的推流工具之外,OBS是主流的推流工具,广泛应用在直转播技术之上。简介go-obs-websocket是一个与OBS进行websocket通信的连接库,具备调用大部分OBS功能的接口,在互动直播和智能转播技术上广泛应用。快速开始安装g......
  • Go每日一库之143:servicegroup(进程内优雅管理多个服务)
    前言在go-zero社区里,经常会有同学问,把APIgateway和RPCservice放在同一个进程内可不可以?怎么弄?有时也会有同学把对外服务和消费队列放在一个进程内。咱们姑且不说此种用法合理与否,因为各个公司的业务场景和开发模式的差异,我们就只来看看此类问题怎么解比较优雅。问题举例......
  • Go每日一库之141:go-bindata(嵌入静态文件)
    使用Go开发应用的时候,有时会遇到需要读取静态资源的情况。比如开发Web应用,程序需要加载模板文件生成输出的HTML。在程序部署的时候,除了发布应用可执行文件外,还需要发布依赖的静态资源文件。这给发布过程添加了一些麻烦。既然发布单独一个可执行文件是非常简单的操作,就有人会......
  • Go每日一库之140:Zinc(轻量级搜索引擎)
    ‍项目介绍Zinc是一个轻量级替代Elasticsearch的开源搜索引擎。Elasticsearch真的好用,但是Elasticsearch安装和配置也是真的繁琐,后续的一些维护也有一定成本。另外一个Elasticsearch的不足就是服务运行起来需要的计算资源较多,对于普通的用户来说是有点浪费的。Zinc,拥有......
  • Go每日一库之139:cmux (连接多路复用)
    如果一个应用需要同时对外提供HTTP和gRPC服务,通常情况下我们会为两个服务绑定不同的监听端口,而本文要介绍的cmux为我们提供了一种连接多路复用的新选择,使用cmux可以将不同服务绑定在同一个网络端口上!简介多路复用是个很常见的概念,我们在编写HTTP服务时通常会用http.S......
  • Go每日一库之138:dive(Docker 镜像分析)
    什么是dive?用于探索Docker镜像、每一层中的内容以及发现缩小Docker/OCI镜像大小的方法的工具。安装divego get github.com/wagoodman/divedive特性按层分解Docker镜像可视化展示每一层变化分析镜像空间使用百分比快速构建分析镜像支持多种镜像源和容器引擎......