编程日记:分享开源库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(), "")
}

总结

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

相关推荐
九圣残炎29 分钟前
【springboot】简易模块化开发项目整合Redis
spring boot·redis·后端
.生产的驴1 小时前
Electron Vue框架环境搭建 Vue3环境搭建
java·前端·vue.js·spring boot·后端·electron·ecmascript
爱学的小涛1 小时前
【NIO基础】基于 NIO 中的组件实现对文件的操作(文件编程),FileChannel 详解
java·开发语言·笔记·后端·nio
爱学的小涛1 小时前
【NIO基础】NIO(非阻塞 I/O)和 IO(传统 I/O)的区别,以及 NIO 的三大组件详解
java·开发语言·笔记·后端·nio
北极无雪1 小时前
Spring源码学习:SpringMVC(4)DispatcherServlet请求入口分析
java·开发语言·后端·学习·spring
爱码少年1 小时前
springboot工程中使用tcp协议
spring boot·后端·tcp/ip
2401_857622669 小时前
SpringBoot框架下校园资料库的构建与优化
spring boot·后端·php
2402_857589369 小时前
“衣依”服装销售平台:Spring Boot框架的设计与实现
java·spring boot·后端
哎呦没10 小时前
大学生就业招聘:Spring Boot系统的架构分析
java·spring boot·后端
_.Switch11 小时前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j