golang终端仪表盘开发插件库termui-blessed-contrib的使用
Golang终端仪表盘开发插件库termui-blessed-contrib的使用
简介
termui是一个跨平台、完全可定制的终端仪表盘和小部件库,基于termbox-go构建。它受到blessed-contrib和tui-rs的启发,完全用Go语言编写。
特性
- 提供多种常见用途的预制小部件
- 轻松创建自定义小部件
- 可以使用相对网格或绝对坐标定位小部件
- 支持键盘、鼠标和终端调整大小事件
- 支持颜色和样式设置
安装
Go模块
不需要手动go get
termui,Go会自动管理导入的依赖项。注意在import语句中需要包含/v3
。
Dep
使用Dep安装时,命令为dep ensure -add github.com/gizak/termui
。注意使用Dep时import语句中不需要包含/v3
。
Hello World示例
package main
import (
"log"
ui "github.com/gizak/termui/v3"
"github.com/gizak/termui/v3/widgets"
)
func main() {
// 初始化termui
if err := ui.Init(); err != nil {
log.Fatalf("failed to initialize termui: %v", err)
}
defer ui.Close() // 确保程序退出时关闭
// 创建一个段落小部件
p := widgets.NewParagraph()
p.Text = "Hello World!"
p.SetRect(0, 0, 25, 5) // 设置位置和大小(x0,y0,x1,y1)
// 渲染小部件
ui.Render(p)
// 事件循环,等待键盘事件退出
for e := range ui.PollEvents() {
if e.Type == ui.KeyboardEvent {
break
}
}
}
可用小部件
termui提供了多种小部件,包括:
- BarChart - 条形图
- Canvas - 画布(用于绘制点阵图)
- Gauge - 仪表盘
- Image - 图像显示
- List - 列表
- Tree - 树形结构
- Paragraph - 段落文本
- PieChart - 饼图
- Plot - 散点图和折线图
- Sparkline - 迷你图
- StackedBarChart - 堆叠条形图
- Table - 表格
- Tabs - 标签页
可以通过go run _examples/{example}.go
运行示例,或者使用make run-examples
依次运行所有示例。
注意事项
由于维护者时间有限,项目的更新频率可能不一致。欢迎有兴趣的开发者参与维护。
更多关于golang终端仪表盘开发插件库termui-blessed-contrib的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang终端仪表盘开发插件库termui-blessed-contrib的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用termui-blessed-contrib开发Golang终端仪表盘
termui-blessed-contrib是一个基于blessed和termui的Go语言终端仪表盘开发库,它提供了丰富的终端UI组件,可以创建漂亮的命令行界面和数据可视化仪表盘。
安装
首先安装必要的依赖:
go get github.com/gizak/termui/v3
go get github.com/guptarohit/blessed-contrib
基本使用示例
下面是一个简单的仪表盘示例,展示如何使用termui-blessed-contrib创建基本的终端界面:
package main
import (
"time"
"github.com/guptarohit/blessed-contrib/blessed"
"github.com/guptarohit/blessed-contrib/contrib"
)
func main() {
// 创建屏幕对象
screen, err := blessed.NewScreen()
if err != nil {
panic(err)
}
defer screen.Fini()
// 设置屏幕标题
screen.SetTitle("Terminal Dashboard")
// 创建网格布局
grid := contrib.NewGrid(screen)
grid.Set(12, 12, 0, 0)
// 添加组件
lineChart := contrib.NewLineChart()
lineChart.BorderLabel = "CPU Usage"
lineChart.Data = []float64{10, 20, 30, 40, 30, 20, 10}
grid.AddItem(lineChart, 0, 0, 4, 4, 0, 0, true)
gauge := contrib.NewGauge()
gauge.BorderLabel = "Memory"
gauge.Percent = 50
grid.AddItem(gauge, 0, 4, 4, 4, 0, 0, true)
// 渲染界面
screen.Render()
// 模拟数据更新
go func() {
for {
time.Sleep(1 * time.Second)
// 更新图表数据
newData := append(lineChart.Data[1:], rand.Float64()*50)
lineChart.Data = newData
// 更新仪表盘
gauge.Percent = (gauge.Percent + 10) % 100
screen.Render()
}
}()
// 等待退出
screen.WaitForQuit()
}
主要组件介绍
1. 图表组件
// 折线图
lineChart := contrib.NewLineChart()
lineChart.BorderLabel = "Network Traffic"
lineChart.Data = []float64{1.2, 2.3, 3.4, 4.5}
// 柱状图
barChart := contrib.NewBarChart()
barChart.BorderLabel = "Requests"
barChart.Data = []float64{10, 20, 30, 40}
barChart.Labels = []string{"Mon", "Tue", "Wed", "Thu"}
// 饼图
pieChart := contrib.NewPieChart()
pieChart.BorderLabel = "Disk Usage"
pieChart.Data = []float64{30, 20, 50} // 百分比
pieChart.Labels = []string{"System", "Apps", "Media"}
2. 仪表和进度条
// 仪表盘
gauge := contrib.NewGauge()
gauge.BorderLabel = "CPU"
gauge.Percent = 75 // 百分比
// 进度条
progress := contrib.NewProgressBar()
progress.BorderLabel = "Download"
progress.Percent = 25
3. 表格和列表
// 表格
table := contrib.NewTable()
table.BorderLabel = "Processes"
table.Rows = [][]string{
{"PID", "Name", "CPU%"},
{"1234", "nginx", "2.5"},
{"5678", "mysql", "15.2"},
}
// 列表
list := contrib.NewList()
list.BorderLabel = "Menu"
list.Items = []string{"Start", "Stop", "Restart", "Exit"}
4. 地图和热图
// 地图
mapChart := contrib.NewMap()
mapChart.BorderLabel = "Locations"
mapChart.Data = map[string]float64{
"US": 100,
"CN": 200,
"JP": 50,
}
// 热图
heatMap := contrib.NewHeatMap()
heatMap.BorderLabel = "Activity"
heatMap.Data = [][]float64{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
}
高级功能
1. 事件处理
screen.SetKeyListener(func(key string) {
switch key {
case "q":
screen.Quit()
case "up":
// 处理上键
case "down":
// 处理下键
}
screen.Render()
})
2. 自定义样式
lineChart := contrib.NewLineChart()
lineChart.BorderFg = blessed.ColorGreen
lineChart.LineColor = blessed.ColorCyan
lineChart.Style.Fg = blessed.ColorWhite
3. 多面板布局
grid := contrib.NewGrid(screen)
grid.Set(12, 12, 0, 0)
// 第一行:两个组件各占一半
grid.AddItem(lineChart, 0, 0, 6, 6, 0, 0, true)
grid.AddItem(barChart, 0, 6, 6, 6, 0, 0, true)
// 第二行:一个全宽组件
grid.AddItem(table, 6, 0, 6, 12, 0, 0, true)
实际应用示例:系统监控仪表盘
package main
import (
"math/rand"
"time"
"github.com/guptarohit/blessed-contrib/blessed"
"github.com/guptarohit/blessed-contrib/contrib"
)
func main() {
screen, err := blessed.NewScreen()
if err != nil {
panic(err)
}
defer screen.Fini()
screen.SetTitle("System Monitor")
grid := contrib.NewGrid(screen)
grid.Set(12, 12, 0, 0)
// CPU 使用率图表
cpuChart := contrib.NewLineChart()
cpuChart.BorderLabel = "CPU Usage %"
cpuChart.Data = make([]float64, 20)
grid.AddItem(cpuChart, 0, 0, 4, 6, 0, 0, true)
// 内存仪表盘
memGauge := contrib.NewGauge()
memGauge.BorderLabel = "Memory"
grid.AddItem(memGauge, 0, 6, 2, 6, 0, 0, true)
// 磁盘仪表盘
diskGauge := contrib.NewGauge()
diskGauge.BorderLabel = "Disk"
grid.AddItem(diskGauge, 2, 6, 2, 6, 0, 0, true)
// 进程表格
procTable := contrib.NewTable()
procTable.BorderLabel = "Top Processes"
procTable.Rows = [][]string{
{"PID", "Name", "CPU%", "MEM%"},
{"1234", "nginx", "2.5", "1.2"},
{"5678", "mysql", "15.2", "25.1"},
}
grid.AddItem(procTable, 4, 0, 8, 12, 0, 0, true)
// 模拟数据更新
go func() {
for {
time.Sleep(1 * time.Second)
// 更新CPU图表
newCpuData := append(cpuChart.Data[1:], rand.Float64()*100)
cpuChart.Data = newCpuData
// 更新内存和磁盘
memGauge.Percent = (memGauge.Percent + rand.Intn(10)) % 100
diskGauge.Percent = (diskGauge.Percent + rand.Intn(5)) % 100
screen.Render()
}
}()
screen.Render()
screen.WaitForQuit()
}
总结
termui-blessed-contrib为Go开发者提供了创建功能丰富的终端仪表盘的强大工具。通过组合各种图表、仪表和表格组件,可以构建出适合系统监控、数据分析等场景的终端界面。其优势包括:
- 丰富的可视化组件
- 灵活的布局系统
- 简单易用的API
- 实时数据更新能力
- 跨平台支持
对于需要在终端展示数据的Go应用程序,termui-blessed-contrib是一个非常值得考虑的选择。