「GoCN酷Go推荐」强大的字符表格生成器 tablewriter

共 1788字,需浏览 4分钟

 ·

2022-02-12 10:03

前言


日常工作中,我们有时需要以字符表格的形式向控制台输出一些结构化的数据,以实现类似 mysql 客户端在控制台输出查询结果的展示效果。那在 go 里如何实现这样的功能呢?也许大家可以试试 tablewriter

简介


tablewriter(github.com/olekukonko/tablewriter) 是一款功能非常强大的字符表格生成工具,它不仅能够帮助我们实现单元格自动填充、边框绘制等通用能力,还支持设置对齐方式、单元格合并、定制分隔符等高级功能。

以下是 tablewriter 的主要特性,它甚至包含了我们日常操作 Excel 时常用的一些基础功能:

  • 单元格自动填充和等宽对齐
  • 单元格多行支持
  • 支持对齐方式设定
  • 支持自定义分隔符、表头、边框等
  • 自动对齐数字和百分数
  • 以 io.Writer 的形式直接输出内容
  • 从 CSV 中直接加载数据
  • 支持自定义脚注
  • 支持单元格合并

使用举例


基本表格输出

package main

import (
 "os"

 "github.com/olekukonko/tablewriter"
)

func main() {
 data := [][]string{
  {"A""北京冬奥会 666""100"},
  {"B""Happy New Year 2022!""200"},
 }

 table := tablewriter.NewWriter(os.Stdout)
 table.SetHeader([]string{"Name""Sign""Rating"})

 for _, v := range data {
  table.Append(v)
 }
 table.Render()
}

控制台(等宽字体)输出:

简单表格输出

从以上输出中我们看到,tablewriter 不仅帮我们打印出了字符表格,还实现了中英文字符单元格的等宽对齐!

单元格合并举例

package main

import (
 "os"

 "github.com/olekukonko/tablewriter"
)

func main() {
 data := [][]string{
  {"A""北京冬奥会 666""100"},
  {"A""北京冬奥会真棒""150"},
  {"B""Happy New Year 2022!""200"},
  {"B""开工大吉!""300"},
 }

 table := tablewriter.NewWriter(os.Stdout)
 table.SetHeader([]string{"Name""Sign""Rating"})
 // 合并第一列内容相同的单元格
 table.SetAutoMergeCellsByColumnIndex([]int{0})
 table.SetRowLine(true)

 table.AppendBulk(data)

 table.Render()
}

控制台(等宽字体)输出:

合并单元格

可见,第一列内容相同的相邻单元格成功实现了合并!

总结


tablewriter 是一款功能强大的字符表格绘制工具,熟练掌握 tablewriter 的使用技巧可以方便地绘制出漂亮的表格输出,很适用于集成到命令行工具中去,大家快试试吧!

参考资料


  • github.com/olekukonko/tablewriter
  • https://pkg.go.dev/github.com/olekukonko/tablewriter
  • github.com/mattn/go-runewidth


《酷Go推荐》招募:


各位Gopher同学,最近我们社区打算推出一个类似GoCN每日新闻的新栏目《酷Go推荐》,主要是每周推荐一个库或者好的项目,然后写一点这个库使用方法或者优点之类的,这样可以真正的帮助到大家能够学习到

新的库,并且知道怎么用。


大概规则和每日新闻类似,如果报名人多的话每个人一个月轮到一次,欢迎大家报名!戳「阅读原文」,即可报名


扫码也可以加入 GoCN 的大家族哟~


浏览 311
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报