golang终端表格数据美化与可读性增强插件库uitable的使用

golang终端表格数据美化与可读性增强插件库uitable的使用

uitable是一个用于在终端应用程序中以表格形式展示数据的Go库。它提供了调整列宽和自动换行的功能,可以显著提高数据的可读性。

示例用法

下面是一个完整的使用示例:

package main

import (
	"fmt"
	"github.com/gosuri/uitable"
)

type Hacker struct {
	Name     string
	Birthday string
	Bio      string
}

func main() {
	// 创建一些示例数据
	hackers := []Hacker{
		{
			Name:     "Ada Lovelace",
			Birthday: "December 10, 1815",
			Bio:      "Ada was a British mathematician and writer, chiefly known for her work on Charles Babbage's early mechanical general-purpose computer, the Analytical Engine",
		},
		{
			Name:     "Alan Turing",
			Birthday: "June 23, 1912",
			Bio:      "Alan was a British pioneering computer scientist, mathematician, logician, cryptanalyst and theoretical biologist",
		},
	}

	// 示例1:基本表格
	table := uitable.New()
	table.MaxColWidth = 50 // 设置最大列宽

	// 添加表头
	table.AddRow("NAME", "BIRTHDAY", "BIO")
	// 添加数据行
	for _, hacker := range hackers {
		table.AddRow(hacker.Name, hacker.Birthday, hacker.Bio)
	}
	fmt.Println(table)

	// 示例2:带自动换行的两列表格
	table = uitable.New()
	table.MaxColWidth = 80
	table.Wrap = true // 启用自动换行

	for _, hacker := range hackers {
		table.AddRow("Name:", hacker.Name)
		table.AddRow("Birthday:", hacker.Birthday)
		table.AddRow("Bio:", hacker.Bio)
		table.AddRow("") // 添加空行作为分隔
	}
	fmt.Println(table)
}

示例1输出结果

NAME          BIRTHDAY          BIO
Ada Lovelace  December 10, 1815 Ada was a British mathematician and writer, chi...
Alan Turing   June 23, 1912     Alan was a British pioneering computer scientis...

示例2输出结果

Name:     Ada Lovelace
Birthday: December 10, 1815
Bio:      Ada was a British mathematician and writer, chiefly known for her work on
          Charles Babbage's early mechanical general-purpose computer, the Analytical
          Engine

Name:     Alan Turing
Birthday: June 23, 1912
Bio:      Alan was a British pioneering computer scientist, mathematician, logician,
          cryptanalyst and theoretical biologist

主要功能

  1. 列宽控制:通过MaxColWidth属性可以设置每列的最大宽度
  2. 自动换行:设置Wrap = true可以启用自动换行功能
  3. 灵活添加行:使用AddRow()方法可以轻松添加表头和数据行

安装方法

使用以下命令安装uitable库:

go get -v github.com/gosuri/uitable

这个库非常适合需要在命令行界面中展示结构化数据的场景,能够显著提升终端输出的可读性和美观度。


更多关于golang终端表格数据美化与可读性增强插件库uitable的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang终端表格数据美化与可读性增强插件库uitable的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


使用uitable库美化Golang终端表格输出

uitable是一个轻量级的Go库,用于在终端中创建美观的表格输出。它非常适合命令行工具或需要以表格形式展示数据的应用程序。

安装

go get github.com/gosuri/uitable

基本用法

简单表格

package main

import (
	"fmt"
	"github.com/gosuri/uitable"
)

type Person struct {
	Name string
	Age  int
	City string
}

func main() {
	table := uitable.New()
	table.MaxColWidth = 20
	table.AddRow("NAME", "AGE", "CITY")
	
	people := []Person{
		{"Alice", 25, "New York"},
		{"Bob", 30, "San Francisco"},
		{"Charlie", 35, "Chicago"},
	}
	
	for _, p := range people {
		table.AddRow(p.Name, p.Age, p.City)
	}
	
	fmt.Println(table)
}

输出效果:

NAME    AGE  CITY          
Alice    25  New York      
Bob      30  San Francisco 
Charlie  35  Chicago       

自定义样式

func main() {
	table := uitable.New()
	table.MaxColWidth = 30
	table.Wrap = true // 自动换行
	
	// 添加标题行
	table.AddRow("ID", "PRODUCT", "DESCRIPTION", "PRICE")
	
	// 添加数据行
	table.AddRow(1, "Laptop", "High performance laptop with 16GB RAM", 999.99)
	table.AddRow(2, "Mouse", "Wireless ergonomic mouse", 49.99)
	table.AddRow(3, "Keyboard", "Mechanical keyboard with RGB lighting", 129.99)
	
	fmt.Println(table)
}

对齐方式

func main() {
	table := uitable.New()
	
	// 右对齐数字列
	table.RightAlign(3) // 第4列(索引3)右对齐
	
	table.AddRow("ITEM", "QUANTITY", "UNIT PRICE", "TOTAL")
	table.AddRow("Apple", 5, 0.99, 4.95)
	table.AddRow("Orange", 3, 1.25, 3.75)
	table.AddRow("Banana", 10, 0.29, 2.90)
	
	fmt.Println(table)
}

分隔线

func main() {
	table := uitable.New()
	table.Separator = " | " // 设置列分隔符
	
	table.AddRow("USER", "LOGIN TIME", "STATUS")
	table.AddRow("alice", "2023-05-01 09:30", "active")
	table.AddRow("bob", "2023-05-02 14:15", "inactive")
	
	fmt.Println(table)
}

高级功能

表格标题

func main() {
	table := uitable.New()
	table.MaxColWidth = 25
	
	// 设置表格标题
	table.Title = "Employee List"
	
	table.AddRow("ID", "Name", "Department", "Salary")
	table.AddRow(101, "John Doe", "Engineering", 85000)
	table.AddRow(102, "Jane Smith", "Marketing", 72000)
	
	fmt.Println(table)
}

颜色支持

uitable本身不直接支持颜色,但可以结合其他库如github.com/fatih/color使用:

import (
	"github.com/fatih/color"
	"github.com/gosuri/uitable"
)

func main() {
	table := uitable.New()
	
	// 创建带颜色的文本
	red := color.New(color.FgRed).SprintFunc()
	green := color.New(color.FgGreen).SprintFunc()
	
	table.AddRow("STATUS", "MESSAGE")
	table.AddRow(red("ERROR"), "Failed to connect to database")
	table.AddRow(green("SUCCESS"), "Operation completed")
	
	fmt.Println(table)
}

实际应用示例

package main

import (
	"fmt"
	"github.com/gosuri/uitable"
)

type Server struct {
	Name     string
	IP       string
	Status   string
	CPUUsage float64
	Memory   float64
}

func main() {
	servers := []Server{
		{"Web-01", "192.168.1.10", "Running", 25.4, 45.2},
		{"DB-01", "192.168.1.20", "Running", 78.9, 82.1},
		{"Cache-01", "192.168.1.30", "Stopped", 0.0, 10.5},
	}
	
	table := uitable.New()
	table.MaxColWidth = 20
	table.Wrap = true
	
	// 标题行
	table.AddRow("SERVER NAME", "IP ADDRESS", "STATUS", "CPU %", "MEMORY %")
	
	// 数据行
	for _, s := range servers {
		status := s.Status
		if s.Status == "Stopped" {
			status = fmt.Sprintf("\x1b[31m%s\x1b[0m", status) // 红色显示停止状态
		}
		
		cpu := fmt.Sprintf("%.1f%%", s.CPUUsage)
		if s.CPUUsage > 70 {
			cpu = fmt.Sprintf("\x1b[33m%s\x1b[0m", cpu) // 黄色显示高CPU使用率
		}
		
		table.AddRow(s.Name, s.IP, status, cpu, fmt.Sprintf("%.1f%%", s.Memory))
	}
	
	fmt.Println("Server Status Report")
	fmt.Println(table)
}

总结

uitable库提供了简单而强大的功能来美化终端表格输出,主要特点包括:

  • 自动调整列宽
  • 支持文本换行
  • 可自定义对齐方式
  • 轻量级无额外依赖
  • 易于集成到现有项目中

对于更复杂的需求,可以考虑其他更全面的表格库如github.com/olekukonko/tablewriter,但uitable在大多数简单场景下已经足够使用且更加轻便。

回到顶部