【go】用go在命令行输出好看的表格_go-pretty-csdn博客


本站和网页 https://blog.csdn.net/Meepoljd/article/details/129422612 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

【Go】用Go在命令行输出好看的表格_go-pretty-CSDN博客
【Go】用Go在命令行输出好看的表格
最新推荐文章于 2024-03-23 09:48:34 发布
Meepoljd 阅读量2.3k 收藏 5 点赞数 3 分类专栏: 运维 Linux 文章标签: golang 数据库 运维开发
版权声明:本文为博主原创文章,遵循
CC 4.0 BY-SA
版权协议,转载请附上原文出处链接和本声明。
本文链接:
https://blog.csdn.net/Meepoljd/article/details/129422612
版权
同时被 2 个专栏收录
57 篇文章
1 订阅
订阅专栏
5 篇文章
0 订阅
用Go在命令行输出好看的表格
前言
正文
生成Table
表头设置
插入行
表格标题
自动标号
单元格合并
列合并
行合并
样式设置
居中设置
数字自动高亮标红
完整Demo代码
结语
最近在写一些运维小工具,比如批量进行ping包的工具,实现不困难,反正就是ping,统计,然后输出,不过我本着自己既是开发者又是使用者的理念,还是不喜欢输出特别难看的工具,就像这样:
所以就去
https://pkg.go.dev/
瞄了一眼,看看有没有啥适合的库能够把输出整的好看点的,于是找到了一个库
github.com/jedib0t/go-pretty/v6/table
,这是一个在命令行输出格式化表格的库,这里记录一下使用这个库进行一些格式化输出的过程。
其实还有一个比较简单的库叫做gotable,也能实现基础的格式化输出功能,使用起来也方便些,不过功能相对来说就要单一一些,在表格样式设置上会差一些,没那么自由,也可以看下
https://pkg.go.dev/github.com/liushuochen/gotable#section-readme
接下来开始正式的去在命令行生成好看的满足需要的表格。
首先我们要生成一个Table结构体的实例,可以直接New一个,也可以自己构造:
:=
table
Table
// 或者
NewWriter
NewWriter会返回一个Writer接口
表格首先要设置表头,以我的应用为例,表头设置:
header
Row
"ID"
"IP"
"Num"
"PacketsRecv"
"PacketLoss"
"AvgRtt"
这样生成了一个表头行,然后要通过AppendHeader方法在表格中生效:
AppendHeader
看看效果,表头已经打印出来了
+----+----+-----+-------------+------------+--------+
| ID | IP | NUM | PACKETSRECV | PACKETLOSS | AVGRTT |
数据的插入和表头的生成类似,要生成一个table.Row,然后调用AppendRow方法:
func
Demo
AppendRow
for
<=
++
row
fmt
Sprintf
"10.0.0.%v"
+
"AppendRow"
效果如下:
+----+----------+-----+-------------+------------+-----------+
| ID | IP
| NUM | PACKETSRECV | PACKETLOSS | AVGRTT
1 | 10.0.0.1 |
5 |
1 |
1 | AppendRow |
2 | 10.0.0.2 |
6 |
2 |
2 | AppendRow |
3 | 10.0.0.3 |
7 |
3 |
3 | AppendRow |
4 | 10.0.0.4 |
8 |
4 |
4 | AppendRow |
5 | 10.0.0.5 |
9 |
5 | AppendRow |
当然也可以生成table.Row的切片后调用一次AppendRows方法,效果和上面是一样的:
AppendRows
var
rows
=
append
"AppendRows"
+----+----------+-----+-------------+------------+------------+
1 | AppendRow
2 | AppendRow
3 | AppendRow
4 | AppendRow
5 | AppendRow
1 | AppendRows |
2 | AppendRows |
3 | AppendRows |
4 | AppendRows |
5 | AppendRows |
在设置表格实际内容时,还可以设置一个表格标题,如下:
AddTitle
SetTitle
"This is Easy Table"
+-------------------------------------------------------------+
| This is Easy Table
在插入行的时候,我额外输入了一个ID列,作为标号,其实table提供了相关的方法和接口,只需要调用SetAutoIndex方法,增加自动的索引列即可:
MakeHeader
SetAutoIndex
true
+------------------------------------------------------------+
+---+----------+-----+-------------+------------+------------+
| IP
| 1 | 10.0.0.1 |
| 2 | 10.0.0.2 |
| 3 | 10.0.0.1 |
| 4 | 10.0.0.2 |
有的时候,相邻单元格的值一样我们可能会想要进行合并,这样更美观,单元格合并分为列合并和行合并;先定义一下这里的列合并和行合并:
列合并:针对单列,如果单列中的多个相邻行数据一样,那么就合并为一个大行;
行合并:针对单行,如果单行中的多个相邻列数据一样,那么久合并为一个大列;
这里我们用到的原始表格如下:
+--------------------------------------------------------------+
+---+----------+-------+-------------+------------+------------+
NUM | PACKETSRECV | PACKETLOSS | AVGRTT
| TOTAL
| TOTAL |
TOTAL |
TOTAL | 4
我们先进行最后一列AvgRtt的列合并:
ColumnMerge
SetColumnConfigs
ColumnConfig
Name
// Number是指定列的序号
// Number: 5,
AutoMerge
Align
text
AlignCenter
可以选择通过列的表头或者列的序号来选择具体进行合并的列:
AppendRow |
这样看表格线条不明显,感觉不到区分,那么可以加上一些设置
d.T.Style().Options.SeparateRows = true
+---+----------+-------+-------------+------------+
行合并我们对最后一行的汇总行进行合并,具体做法是在添加汇总行时增加RowConfig参数:
AppendFooter
"Total"
count
RowConfig
TOTAL
| 4
+---+---------------------------------------------+------------+
现在整个表格已经生成,但我们还需要进行一些美化,这就要对表格的样式进行设置了;
对于居中,无法直接进行全局的设置,必须根据列进行,如下:
SetAlignCenter
column
string
// 根据表格的列数循环进行设置,统一居中
len
name
if
==
AlignHeader
AlignFooter
continue
居中效果如下,这样既能保留列合并又完成了剧中设置:
NUM
| PACKETSRECV | PACKETLOSS |
AVGRTT
| AppendRows |
在我的应用场景中,ping的ip如果出现了丢包情况,那就要红色高亮,方便使用者马上关注到,这种情况下,可以通过Transformer来设置:
SetWarnColor
// 字体颜色
WarnColor
Colors
BgRed
warnTransformer
Transformer
val
interface
float64
>
// 统计丢包服务器总数
return
"%.2f%%"
"%v%%"
实际效果如下:
package
main
import
"fmt"
"math/rand"
"github.com/jedib0t/go-pretty/v6/table"
"github.com/jedib0t/go-pretty/v6/text"
type
struct
T table
Writer
NewDemo
&
// d.T.SetStyle(table.StyleLight)
Style
Options
SeparateRows
// rowConfig := table.RowConfig{AutoMerge: true}
rand
Float64
100
+=
0.0
AutoMergeAlign
Print
Println
Render
demo
// demo.AddTitle()
// demo.ColumnMerge()
// demo.SetAlignCenter()
本文介绍了使用第三方库美化Golang的命令行表格格式化输出,除了table以外,
go-pretty
库中还包含了进度条、列表等美化方法,感兴趣可以自己看看官方文档。
优惠劵
关注
点赞
觉得还不错?
一键收藏
打赏
知道了
评论
最近在写一些运维小工具,比如批量进行ping包的工具,实现不困难,反正就是ping,统计,然后输出,不过我本着自己既是开发者又是使用者的理念,还是不喜欢输出特别难看的工具,就像这样:所以就去瞄了一眼,看看有没有啥适合的库能够把输出整的好看点的,于是找到了一个库,这是一个在命令行输出格式化表格的库,这里记录一下使用这个库进行一些格式化输出的过程。
复制链接
扫一扫
专栏目录
go-pre
tty
:漂亮的打印表,还有更多的
内容!
04-06
漂亮
用于美化表,列表,进度栏,文本等的控制台
输出
的实用程序
桌子
表格
漂亮地打印为ASCII / Unicode字符串。
+-----+------------+-----------+--------+-----------------------------+
# | FIRST NAME | LAST NAME | SALARY |
1 | Arya
| Stark
3000 |
20 | Jon
| Snow
2000 | You k
tablewriter:
Golang
中的ASCII表
05-01
ASCII表编写器
快速生成ASCII表...安装简单
go get github.com/olekukonko/tablewriter
特征
自动填充
支持多行
支持对齐
支持自定义分隔符
自动对齐数字和百分比
通过io.Writer直接写入http,文件等
直接从CSV文件读取
通过SetRowLine可选行线
规范化表头
将CSV标头设为可选
启用或禁用
边框
设置自定义页脚支持
可选的相同单元格合并
设置自定义标题
多行单元格中段落的可选重排。
示例1-基本
data := [][] string {
[] string { "A" , "The Good" , "500" },
[] string { "B" , "The Very very Bad Man" , "288" },
[] string { "C" , "The Ugly" , "120
1 条评论
您还未登录,请先
登录
后发表或查看评论
探索 `go-pre
`:优雅地处理 Go 语言中的数据
最新发布
gitblog_00041的博客
03-23
300
探索 go-pre
:优雅地处理 Go 语言中的数据
项目地址:https://gitcode.com/jedib0t/go-pre
在软件
开发
中,尤其是涉及到
命令行
工具或日志处理时,清晰、美观的数据
是必不可少的。go-pre
是一个为 Go 语言设计的库,它提供了一种优雅且高效的方式来格式化和展示数据。本文将深入探讨 go-pre
的功能、技术实现和应用场景,以期鼓...
doggo:人类的
DNS客户端。 用
03-10
狗狗
:dog_face: 人类的
DNS客户端
声张是写在
现代
DNS客户端(如DIG)。 它以简洁简洁的方式
信息,并且还支持DoH,DoT等协议。
它完全是由用Rust写的启发而来的。 我想向其中添加一些功能,但是由于我不了解Rust,所以我发现它是一个很好的机会,可以尝试自己在Go自己中编写DNS客户端。 因此,名称为dog + go => doggo 。
可读的
-支持颜色和
格式。
支持JSON格式-在编写脚本时非常有用。
支持多种传输协议:
通过HTTPS的DNS(DoH)
TLS上的DNS(DoT)
通过TCP的DNS
UDP上的DNS
支持ndot和来自resolv.conf或
参数的搜索配置。
一次支持多个解析器。
支持IPv4和IPv6两种。
安装
二进位
您可以从“部分获取适用于Linux,MacOS和Windows的最新二
lc:licensechecker(lc)是一个
应用程序,它可以扫描目录并标识正在生成报告的SPSS,CSV,JSON,XLSX或CLI
格式
中包含哪些软件许可证。 MIT或UNLICENSE双重许可
05-07
许可证检查器(lc)
注意-这正在大量
中,并且由于这样的主机当前不起作用,请参见发行版以获取有效的解决方案!
lc是一个
工具,它递归遍历提供的目录或文件,以尝试使用SPDX(软件包数据交换)项目提供的许可证列表来确定每个文件所处的软件许可证。 它将在源文件中选择适当命名的许可证文件或内联许可证,例如以下内容
SPDX-License-Identifier: GPL-3.0-only
简而言之,该项目是对的重新实现,而我尝试将语言的细微差别。
它可以以有效的 ,CSV,XLSX,JSON和CLI格式生成报告
。 它被设计为可在捕获stdout或文件工件的CI系统中工作。
MIT或双重许可。
为什么
简而言之摘自
您有一个开源项目。 您如何知道该软件可以做什么和不能做什么?
您有很多开源项目,您如何知道它们的许可证?
您有一个带有许可证文件的项目,但是它是哪个许可证?
Go-一个能够格式化
小工具pre
print)
08-14
一个能够格式化
小工具(pre
pre
:漂亮打印Go数据结构
04-29
Go数据结构的漂亮打印机
$ go get github.com/gobs/pre
文献资料
例子
package main
import "github.com/gobs/pre
"
func main() {
stuff := map[string]interface{} {
"a": 1,
"b": "due",
"c": []int { 1, 2, 3 },
"d": false,
.Pre
Print(stuff)
Go 之 gotable 格式化打印
Looking的博客
10-10
472
gotable是一个第三方库,一些复杂功能可能还不完善,但是对于简单的展示还是不成问题的。安装这些就不多说了,直接上例子吧。
在CLI中打印
----gotable使用介绍
TCatTime的博客
11-14
4836
Go开源库gotable使用介绍。
gotable:GoTable是一个由Go和RocksDB支持的很棒的NoSQL
05-23
GoTable
GoTable是由和支持的高性能NoSQL
。 它的灵感来自BigTable和Redis。
高性能和易于扩展。
强大的API集:GET,SET,DEL,MGET,MSET,MDEL,SCAN,INCR,DUMP和“ Z” API。
数据存储不受RAM限制。
与SSD友好。
(比较和交换)的事务支持。
复制。
编译安装
要构建GoTable,您需要设置具有c ++ 11支持的环境和gcc,有关详细信息,请参见需求部分。
#download GoTable source code
git clone https://github.com/stevejiang/gotable.git
cd gotable
#build rocksdb, it will download rocksdb automatically if missing
sh build
Go 使用
参数
个人信息
wgchen
07-12
85
:Go的高效JSON美化器和压缩器
05-09
Pre
是一个Go程序包,它提供了方法来格式化JSON以提高人类可读性,或者提供紧凑的JSON以实现较小的有效负载。
入门
正在安装
要开始使用Pre
,请安装Go并运行go get :
$ go get -u github.com/tidwall/pre
这将检索库。
使用此示例:
{ " name " :
{ " first " : " Tom " , " last " : " Anderson " },
" age " : 37 ,
" children " : [ " Sara " , " Alex " , " Jack " ],
" fav.movie " : " Deer Hunter " , " friends " : [
{ " first " : " Janet " , " last " : " Murphy " , " ag
Go-Gotabulate-利用你的Go轻松美观的打印你的
数据
Gotabulate - 利用你的Go轻松美观的打印你的
vxsv:用于
数据和SQL
的分页器
05-17
用于
数据(CSV,TSV等)的终端查看器也可以用作在Postgres / MySQL
中滚动的寻呼机。 安装 go get -u github.com/erik/vxsv/cmd/vxsv 用法
$ vxsv --help Usage:
vxsv [--psql | --mysql | --...
GO语言基础-04-数据类型-07-结构体[struct](定义结构体、声明结构体变量、结构体赋值、结构体做参数、结构体指针、结构体嵌套、结构体打印)
运维玄德公
12-08
1050
1. 定义结构体类型
2. 声明结构体变量
3. 赋值
3.1 用结构体赋值
3.2 每个成员分别赋值
4. 结构体使用
4.1 结构体作参数
4.2 结构体指针做参数
4.3 二者区别
4.4 本质原因
5. 结构体嵌套
5.1 一个结构体作为另一个结构体的成员
1)定义
2)赋值和引用
3)完整示例
5.2 直接引入另一个结构体的所有成员
6. 结构体打印
6.1 仅打印值
6.2 打印成员名和值
执行命令 && 实时获取
结果
NetRookieX的博客
04-17
3148
背景
可以获取命令执行的
结果,但要执行完才能够获取。
如果执行的命令是ssh,我们要实时获取,并执行相应的操作呢?
示例
user := "root"
host := "172.16.116.133"
//获取执行命令
cmd := exec.Command("ssh", fmt.Sprintf("%s@%s", user, host))
cmd.Stdin = os.Stdin
var wg sync.WaitGroup
wg.Add(2)
个人常用命令集锦 持续更新
热门推荐
勿忘初心
02-05
3万+
OS
1、 立刻关机
halt
2、 centos安装yum
apt-get install yum
3、 查找文件夹
find / - name 需要查找文件名称
4、 vi里面 查找字符串
“/”,后面跟要查找的字符串,再按回车。vi将光标定位在该串下一次出现的地方上。键入n跳到该串的下一个出现处,键入N跳到该串的上一个出现处。
要查找一个以search为行首的行,则键入/^search ,要查找一个以search为行尾的行,则键入/search$。
5、 解压
tar -zxvf archive
Go 学习笔记(84)— Go 项目目录结构(
目录、测试目录、部署目录、项目管理目录 makefile、scripts、build、tools、文档目录、makefile规则)
wohu1104的专栏
03-02
1万+
Go 项目目录结构、Makefile 结构、编译命令
字符画】实现代码中打印
好看
的图案
小超人的博客
10-15
2285
图片转字符画图片转字符画文字转成图片代码实现功能描述实现思路简述代码整体实现1、通过文件路径获取一个图片2、根据图片的宽度,等比例缩放图片3、将图片保存到文件中4、实现图片转字符串5、把字符串写入文件6、根据文字内容创建图片
图片转字符画
文字转成图片
代码实现功能描述
看到很多人喜欢在代码开始或者结束位置打印比较
的图案,比如佛祖保佑无BUG;正好在学习go,于是就想实现一下这个功能。将图片内容或者文字内容转成字符串形式
,方便我们可以将喜欢的图案转成字符串放到我们写的代码中。详细代码下载
」go-micro
指定consul地址
05-26
在使用 go-micro 框架时,可以通过以下方式指定 Consul 的地址:
1. 在
中使用 --registry_address 参数指定 Consul 的地址,例如:
```
go run main.go --registry_address=consul://localhost:8500
2. 在代码中使用 micro.NewService 函数时指定 Consul 的地址,例如:
```go
import (
"github.com/micro/go-micro"
"github.com/micro/go-micro/registry"
"github.com/micro/go-plugins/registry/consul"
// 创建 Consul 注册中心
consulReg := consul.NewRegistry(
registry.Addrs("localhost:8500"),
// 创建 micro.Service 实例
service := micro.NewService(
micro.Name("example.service"),
micro.Registry(consulReg),
// 运行服务
service.Run()
以上两种方式都可以指定 Consul 的地址,具体使用哪种方式取决于你的实际需求。
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
CSDN认证博客专家
CSDN认证企业博客
码龄7年
德特赛维技术有限公司
65
原创
6万+
周排名
总排名
12万+
访问
等级
931
积分
90
粉丝
106
获赞
47
174
私信
热门文章
我的世界光影使用方法
40901
【漏洞修复】node-exporter被检测出来pprof调试信息泄露漏洞
11460
【安全】Goby使用初探
8756
记一次使用SQOOP抽数到Hive遇到的问题
3993
【Go】实操使用go连接clickhouse
3689
分类专栏
57篇
2篇
python
12篇
Ansible
1篇
HDFS
5篇
大数据
35篇
杂七杂八
安全修复
4篇
数据治理
Grafana
Prometheus
13篇
我的世界
最新评论
Meepoljd:
csdn传资源会莫名其妙变成付费资源,如果实在不知道怎么编译直接配上basic_auth也是可以的
木有,可以clone一个稳定分支直接make build正常编译
Lonelying11:
大佬给一份centos x86编译好的执行文件呗
kurolhp:
大佬,有没有arm架构的修复版本
【Prometheus】关于Prometheus告警的一些使用心得
CSDN-Ada助手:
推荐 Java 技能树:https://edu.csdn.net/skill/java?utm_source=AI_act_java
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
最新文章
【Python】不一样的Ansible(一)
【HDFS】一次备NameNode宕机过久导致的生产事故
2024年
3篇
2023年
21篇
2022年
39篇
2021年
2019年
目录
评论 
被折叠的 
 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
红包个数最小为10个
红包总金额
红包金额最低5元
余额支付
当前余额
3.43
前往充值 >
需支付:
10.00
取消
确定
下一步
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom
发出的红包
打赏作者
你的鼓励将是我创作的最大动力
¥1
¥2
¥4
¥6
¥10
¥20
扫码支付:
获取中
扫码支付
您的余额不足,请更换扫码支付或
充值
实付
使用余额支付
点击重新获取
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
余额充值