用 Go 语言也能优雅输出表格!一招学会 tablewriter

在 Go 语言开发中,很多时候我们需要在命令行输出整齐、美观的表格数据,比如展示配置项、监控指标、执行结果等。这里要给大家介绍一个超实用的小工具------tablewriter。

什么是 tablewriter?

tablewriter 是一个专门用于在终端中绘制文本表格的 Go 语言库。它可以帮助开发者以极简的方式输出格式化、对齐、美观的表格,不用自己辛苦拼接空格或边框,大大提升了 CLI 程序的观感和专业感。

只需要简单配置,就能快速输出支持自动对齐、自动换行、表头设置、边框美化等功能的表格。

如何在项目中使用 tablewriter?

  1. 安装依赖

首先,你需要在项目中引入 tablewriter:

shell 复制代码
go get github.com/olekukonko/tablewriter
  1. 基本用法

来看看一个最简单的示例:

go 复制代码
package main

import (
	"os"
	"github.com/olekukonko/tablewriter"
)

func main() {
	data := [][]string{
		[]string{"Alfred", "24", "Engineer"},
		[]string{"Nancy", "29", "Designer"},
		[]string{"John", "31", "Manager"},
	}

	table := tablewriter.NewWriter(os.Stdout)
	table.SetHeader([]string{"Name", "Age", "Occupation"})

	for _, v := range data {
		table.Append(v)
	}
	table.Render() // 渲染表格输出
}

运行结果就像这样,非常整齐,另外如果需要在终端的左上角每次刷新覆盖之前的表格,可以在输出表格前通过 fmt.Print("\033[2J\033[H") 来清屏并将光标移到左上角:

shell 复制代码
+--------+-----+------------+
|  NAME  | AGE | OCCUPATION |
+--------+-----+------------+
| Alfred |  24 | Engineer   |
| Nancy  |  29 | Designer   |
| John   |  31 | Manager    |
+--------+-----+------------+
  1. 常用配置技巧
  • 设置表格风格

你可以自由配置是否显示边框、分隔线等:

go 复制代码
table.SetBorder(false)          // 不显示边框
table.SetRowLine(true)           // 每行之间显示线
table.SetAutoWrapText(false)     // 禁止自动换行
  • 对齐设置

可以单独设置列对齐方式,默认情况下数字类型右对齐、字符串或其他类型左对齐,可以通过 SetHeaderAlignment、SetAlignment、SetFooterAlignment方法指定表头、正文、表尾的对齐方式:

go 复制代码
table.SetAlignment(tablewriter.ALIGN_LEFT) // 表格内容居左对齐
  • 自定义表头颜色

可以使用 SetHeaderColor 设置彩色表头,让输出更醒目,另外通过SetColumnColor、SetFooterColor能够分别对表内容、表尾指定颜色

go 复制代码
table.SetHeaderColor(
    tablewriter.Colors{tablewriter.Bold, tablewriter.FgHiRedColor},
    tablewriter.Colors{tablewriter.FgGreenColor},
    tablewriter.Colors{tablewriter.FgCyanColor},
)
  • 输出表格格式的文件

对于较小的文件可以在 os.Create 后直接对其进行写入操作:

go 复制代码
file, _ := os.Create("log.txt")
defer file.Close()
table := tablewriter.NewWriter(file)

如果文件比较大,可以将其拆分为一个个小块,再在缓冲区中进行写入操作:

go 复制代码
writer := bufio.NewWriter(file)
defer writer.Flush()
table := tablewriter.NewWriter(writer)
  1. 更多高级功能
  • 支持设置列宽、合并单元格
  • 可以添加 Footer(底部汇总行)
  • 支持 CSV 数据直接读取

总之,tablewriter 小而精悍,非常适合用在各种 CLI 工具、日志输出优化等场景,几乎是 Go 程序员必备的小工具之一!

相关推荐
狂师16 分钟前
夯爆了!分享几个我在用的,基于业务场景接口串联测试Skill !
人工智能·后端·测试
北京地铁1号线19 分钟前
后端开发:缓存(Cache)简介
后端·缓存·cache
IT_陈寒20 分钟前
Vue项目实战经验分享:动态组件在Keep-Alive下的缓存陷阱
前端·人工智能·后端
程序猿乐锅32 分钟前
【从0-1学习Python | 第九篇】继承
开发语言·后端·python·学习·fastapi
2601_9540056233 分钟前
11 种触发 × 18 种行为:ricon 交互编排系统全解
前端·后端·物联网·数学建模·信息可视化·交互
会编程的吕洞宾1 小时前
Spring AI 语义缓存:重复提问不重复花钱
java·人工智能·后端·spring
郭小李1 小时前
spring @RequestMapping注解
java·后端·spring
喵了几个咪10 小时前
GoWind CMS 拆解:在 Go 里给 TipTap 搭一套 Yjs 协同后端
开发语言·后端·golang
Flynt11 小时前
我把微信运动的排行榜和定点推送复刻了一遍:100万次步数更新只要4秒,坑在别处
redis·后端·性能优化
_孤傲_13 小时前
快速掌握 MySQL 语法
数据库·后端·mysql