golang表格数据美化输出插件库gotabulate的使用
Golang 表格数据美化输出插件库 gotabulate 的使用
Gotabulate 是一个用于漂亮打印表格数据的通用 Go 库。
安装
go get github.com/bndr/gotabulate
支持的数据类型
Int
、Int64
、Float64
、String
、interface{}
的 2D 数组String
、interface{}
的 Map(键将用作标题)
基本用法示例
// 创建一些假数据行
row_1 := []interface{}{"john", 20, "ready"}
row_2 := []interface{}{"bndr", 23, "ready"}
// 从 2D 接口数组创建对象
t := gotabulate.Create([][]interface{}{row_1, row_2})
// 设置表头(可选)
t.SetHeaders([]string{"age", "status"})
// 设置空字符串显示(可选)
t.SetEmptyString("None")
// 设置对齐方式(可选)
t.SetAlign("right")
// 打印结果:grid 或 simple
fmt.Println(t.Render("grid"))
/*
输出:
+---------+--------+-----------+
| | age | status |
+=========+========+===========+
| john | 20 | ready |
+---------+--------+-----------+
| bndr | 23 | ready |
+---------+--------+-----------+
*/
字符串数据示例
// 一些字符串数据
string_1 := []string{"TV", "1000$", "Sold"}
string_2 := []string{"PC", "50%", "on Hold"}
// 创建对象
tabulate := gotabulate.Create([][]string{string_1, string_2})
// 设置表头
tabulate.SetHeaders([]string{"Type", "Cost", "Status"})
// 渲染
fmt.Println(tabulate.Render("simple"))
/*
输出:
--------- ---------- ------------
Type Cost Status
--------- ---------- ------------
TV 1000$ Sold
PC 50% on Hold
--------- ---------- ------------
*/
字符串换行示例
tabulate := gotabulate.Create([][]string{
[]string{"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus laoreet vestibulum pretium. Nulla et ornare elit. Cum sociis natoque penatibus et magnis",
"Vivamus laoreet vestibulum pretium. Nulla et ornare elit. Cum sociis natoque penatibus et magnis", "zzLorem ipsum", " test", "test"},
[]string{"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus laoreet vestibulum pretium. Nulla et ornare elit. Cum sociis natoque penatibus et magnis",
"Vivamus laoreet vestibulum pretium. Nulla et ornare elit. Cum sociis natoque penatibus et magnis", "zzLorem ipsum", " test", "test"},
})
tabulate.SetHeaders([]string{"Header 1", "header 2", "header 3", "header 4"})
// 设置最大单元格大小
tabulate.SetMaxCellSize(16)
// 开启字符串换行
tabulate.SetWrapStrings(true)
// 渲染表格
fmt.Println(tabulate.Render("grid"))
更多示例
t := gotabulate.Create([][]string{STRING_ARRAY, STRING_ARRAY})
t.SetHeaders(HEADERS) // 如果没有设置表头,将使用第一行作为表头
t.SetEmptyString("None") // 设置空单元格显示的内容
rendered_string := t.Render("simple") // Render() 将返回一个字符串
状态
目前是 Beta 版本。可能存在一些未发现的边界情况,如果您的表格渲染不正确,请提出问题。
贡献
欢迎所有贡献。TODO 列表在 README 底部。随时可以发送拉取请求。
许可证
Apache License 2.0
TODO
- 添加更多示例
- 更好的文档
- 实现更多数据表格式
- 浮点数的小数点对齐
致谢
灵感来自 Python 包 tabulate
更多关于golang表格数据美化输出插件库gotabulate的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang表格数据美化输出插件库gotabulate的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用gotabulate美化Golang表格数据输出
gotabulate是一个简单易用的Golang库,用于将表格数据格式化为美观的可读输出。它支持多种格式,包括简单的表格、网格样式等,并可以自定义标题、对齐方式等。
安装
go get github.com/bndr/gotabulate
基本使用
1. 简单表格输出
package main
import (
"github.com/bndr/gotabulate"
)
func main() {
// 创建数据 - 二维数组
data := [][]interface{}{
{"John", 28, "Developer", "San Francisco"},
{"Jane", 25, "Designer", "New York"},
{"Bob", 42, "Manager", "Chicago"},
}
// 创建表头
headers := []string{"Name", "Age", "Job", "City"}
// 创建表格
table := gotabulate.Create(data)
table.SetHeaders(headers)
// 设置表格样式
table.SetAlign("center") // 可选: left, right, center
// 输出表格
println(table.Render("grid")) // 可选: simple, grid, fancy
}
输出效果:
+--------+-----+-----------+---------------+
| Name | Age | Job | City |
+========+=====+===========+===============+
| John | 28 | Developer | San Francisco |
+--------+-----+-----------+---------------+
| Jane | 25 | Designer | New York |
+--------+-----+-----------+---------------+
| Bob | 42 | Manager | Chicago |
+--------+-----+-----------+---------------+
2. 自定义选项
package main
import (
"github.com/bndr/gotabulate"
)
func main() {
data := [][]interface{}{
{"Apple", 2.99, 100},
{"Orange", 1.50, 200},
{"Banana", 0.99, 300},
}
headers := []string{"Fruit", "Price", "Stock"}
table := gotabulate.Create(data)
table.SetHeaders(headers)
table.SetAlign("right") // 右对齐数字更美观
table.SetEmptyString("N/A") // 设置空值的显示
table.SetWrapStrings(true) // 自动换行长文本
table.SetMaxCellSize(15) // 设置单元格最大宽度
println(table.Render("fancy"))
}
3. 从结构体生成表格
package main
import (
"github.com/bndr/gotabulate"
)
type Employee struct {
Name string
Age int
Role string
}
func main() {
employees := []Employee{
{"John Doe", 32, "Developer"},
{"Jane Smith", 28, "Designer"},
{"Bob Johnson", 45, "Manager"},
}
// 将结构体切片转换为二维数组
var data [][]interface{}
for _, emp := range employees {
data = append(data, []interface{}{emp.Name, emp.Age, emp.Role})
}
table := gotabulate.Create(data)
table.SetHeaders([]string{"Name", "Age", "Position"})
table.SetAlign("left")
println(table.Render("simple"))
}
高级功能
1. 自定义边框样式
// 创建自定义边框样式
border := gotabulate.Border{
Left: "|",
Right: "|",
Top: "-",
Bottom: "-",
Header: "=",
Middle: "|",
}
table.SetBorder(border)
2. 隐藏表头
table.SetHideLines([]string{"top", "bottom", "header"})
3. 格式化数字
data := [][]interface{}{
{"Product A", 12345.6789, 1000},
{"Product B", 9876.54321, 500},
}
table := gotabulate.Create(data)
table.SetHeaders([]string{"Name", "Price", "Quantity"})
table.SetFloatFormat(2) // 设置小数点后2位
注意事项
- gotabulate不支持合并单元格等复杂表格操作
- 对于非常大的数据集,性能可能不是最优的
- 输出宽度会根据终端自动调整,但可以通过SetMaxCellSize限制
gotabulate是一个轻量级的解决方案,适合在命令行工具中快速生成美观的表格输出。对于更复杂的需求,可以考虑使用termtables或tablewriter等其他库。