编程日记:分享开源库go-pretty

背景

我注意到一些开源的database 存储引擎项目代码里,在每一个存储在磁盘里的entity都会有类似这样的注释,表明这个对象在磁盘里的存储格式是什么样子的,而encode函数就是将这个对象加工成注释上的格式对应的二进制数组。

之前我在做一个东西的时候给项目引入了新的存储对象,当时想把这个注释加上,但是没有想到有什么好的办法可以帮我生成这个东西。所以就放弃了,先粗略写一个上去。

最近工作中需要优化一个服务的CDN成本,然后在aws上下载图片使用情况的报表自己分析的时候,我需要对这个aws报表上的数据分析加工一顿之后输出一些我想要的数据。这里也需要一个类似上面那个问题的东西,就是一个相对成熟的可以打印出来表格的成熟的框架或者开源库什么的。那么既然这个问题遇到两次了,没准别人或者我之后也会遇到相同的问题,那就投入点时间去解决解决吧。一顿搜索和询问gpt之后,发现了这个开源库,也就是今天要介绍的主角。go-pretty。

go-pretty

PS:其实这个部分就是简单的翻译了一下这个项目的readme并且加入了点自己的看法。给大家介绍介绍这个项目有什么功能,能做到什么事情。go-pretty (github.com/jedib0t/go-...) 可以用与在控制台上输出列表,表格,进度条,文本,等等,重点是在构建这些东西的过程中可以给用户提供很强大的定制化能力。

table

在终端中可以输出带有颜色的以及嵌套的表格。下面这个是readme中提到的例子,其实这个格式的表格已经符合我的需求了。

因为这个demo和我的用例有关,所以我把上面这个表格的代码贴出来,这样如果读者朋友们有相同的case可以直接参考这段代码 (看的出来这个库的作者很喜欢权游。。):

erlang 复制代码
package main
​
import (
    "os"
​
    "github.com/jedib0t/go-pretty/v6/table"
)
​
func main() {
    t := table.NewWriter()
    t.SetOutputMirror(os.Stdout)
    t.AppendHeader(table.Row{"#", "First Name", "Last Name", "Salary"})
    t.AppendRows([]table.Row{
        {1, "Arya", "Stark", 3000},
        {20, "Jon", "Snow", 2000, "You know nothing, Jon Snow!"},
    })
    t.AppendSeparator()
    t.AppendRow([]interface{}{300, "Tyrion", "Lannister", 5000})
    t.AppendFooter(table.Row{"", "", "Total", 10000})
    t.Render()
}

带有颜色的表格,如果想实现一个的终端工具,这会是一个能给你提供帮助的好工具。

table的详细文档:github.com/jedib0t/go-...

progress 和 List

最炫酷的当属是这个进度条功能了。而这个demo的代码太长了,我就不贴出来了,感兴趣的小伙伴可以看这里:github.com/jedib0t/go-...

另外,list可以输出多个层级的列表。

demo code:

go 复制代码
func main() {
    l := list.NewWriter()
    l.AppendItem("Game Of Thrones")
    l.Indent()
    l.AppendItems([]interface{}{"Winter", "Is", "Coming"})
    l.Indent()
    l.AppendItems([]interface{}{"This", "Is", "Known"})
    l.UnIndent()
    l.UnIndent()
    l.AppendItem("The Dark Tower")
    l.Indent()
    l.AppendItem("The Gunslinger")
    demoPrint("A Multi-level List", l.Render(), "")
}

总结

我觉得这个库对于想做终端工具的同学来说会是一大助力,另外一个用途就是我在文章开头提到的两个例子,想要输出一些简单的结构化数据,这个也会是一个很好的工具。好了今天的分享就到这里啦。希望这个库会对你有帮助。

相关推荐
disgare19 分钟前
SpringBoot 请求调用时关于高可用机制选型和落地
java·spring boot·后端
余衫马40 分钟前
在 Windows 服务中托管 ASP.NET Core Web API (.net6)
运维·windows·后端·asp.net·.net
预知同行1 小时前
RAG 架构设计深度解析:从向量数据库选型到生产级检索系统
后端·架构
二哈赛车手1 小时前
github拉取自己项目出现的模块依赖问题解决方案
后端
用户6757049885021 小时前
AI开发实战4、AI总是忘记项目规范?因为你缺了这份终极上下文文件
后端·aigc·ai编程
海月水母1 小时前
webrtc网页端拉流流程
后端
阿虎儿1 小时前
Docker 安装 Nacos v1.4.4 踩坑实录
后端
用户6757049885021 小时前
AI开发实战3、90%人用AI写前端都踩的坑:API层混乱!3步教你标准化
后端·aigc·ai编程
程序员清风1 小时前
2026年AI编程工具对比:谁最值得用?
java·后端·面试
希望永不加班1 小时前
SpringBoot 多级缓存(本地缓存 + Redis)
java·spring boot·redis·后端·缓存