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

总结

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

相关推荐
代码吐槽菌1 小时前
基于SSM的毕业论文管理系统【附源码】
java·开发语言·数据库·后端·ssm
豌豆花下猫2 小时前
Python 潮流周刊#78:async/await 是糟糕的设计(摘要)
后端·python·ai
YMWM_2 小时前
第一章 Go语言简介
开发语言·后端·golang
码蜂窝编程官方2 小时前
【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的虎鲸旅游攻略网的设计与实现
java·vue.js·spring boot·后端·spring·旅游
hummhumm2 小时前
第 25 章 - Golang 项目结构
java·开发语言·前端·后端·python·elasticsearch·golang
J老熊2 小时前
JavaFX:简介、使用场景、常见问题及对比其他框架分析
java·开发语言·后端·面试·系统架构·软件工程
AuroraI'ncoding2 小时前
时间请求参数、响应
java·后端·spring
好奇的菜鸟3 小时前
Go语言中的引用类型:指针与传递机制
开发语言·后端·golang
Alive~o.03 小时前
Go语言进阶&依赖管理
开发语言·后端·golang
许苑向上3 小时前
Dubbo集成SpringBoot实现远程服务调用
spring boot·后端·dubbo