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

前言
日常工作中,我們有時需要以字符表格的形式向控制臺輸出一些結構化的數(shù)據(jù),以實現(xiàn)類似 mysql 客戶端在控制臺輸出查詢結果的展示效果。那在 go 里如何實現(xiàn)這樣的功能呢?也許大家可以試試 tablewriter。

簡介
tablewriter(github.com/olekukonko/tablewriter) 是一款功能非常強大的字符表格生成工具,它不僅能夠幫助我們實現(xiàn)單元格自動填充、邊框繪制等通用能力,還支持設置對齊方式、單元格合并、定制分隔符等高級功能。
以下是 tablewriter 的主要特性,它甚至包含了我們?nèi)粘2僮?Excel 時常用的一些基礎功能:
單元格自動填充和等寬對齊 單元格多行支持 支持對齊方式設定 支持自定義分隔符、表頭、邊框等 自動對齊數(shù)字和百分數(shù) 以 io.Writer 的形式直接輸出內(nèi)容 從 CSV 中直接加載數(shù)據(jù) 支持自定義腳注 支持單元格合并

使用舉例
基本表格輸出
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 不僅幫我們打印出了字符表格,還實現(xiàn)了中英文字符單元格的等寬對齊!
單元格合并舉例
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"})
?//?合并第一列內(nèi)容相同的單元格
?table.SetAutoMergeCellsByColumnIndex([]int{0})
?table.SetRowLine(true)
?table.AppendBulk(data)
?table.Render()
}
控制臺(等寬字體)輸出:

可見,第一列內(nèi)容相同的相鄰單元格成功實現(xiàn)了合并!

總結
tablewriter 是一款功能強大的字符表格繪制工具,熟練掌握 tablewriter 的使用技巧可以方便地繪制出漂亮的表格輸出,很適用于集成到命令行工具中去,大家快試試吧!

參考資料
github.com/olekukonko/tablewriter https://pkg.go.dev/github.com/olekukonko/tablewriter github.com/mattn/go-runewidth
《酷Go推薦》招募:
各位Gopher同學,最近我們社區(qū)打算推出一個類似GoCN每日新聞的新欄目《酷Go推薦》,主要是每周推薦一個庫或者好的項目,然后寫一點這個庫使用方法或者優(yōu)點之類的,這樣可以真正的幫助到大家能夠學習到
新的庫,并且知道怎么用。
大概規(guī)則和每日新聞類似,如果報名人多的話每個人一個月輪到一次,歡迎大家報名!戳「閱讀原文」,即可報名
掃碼也可以加入 GoCN 的大家族喲~
