golang终端输出美化与文本装饰增强插件richgo的使用
Golang终端输出美化与文本装饰增强插件richgo的使用
关于richgo
Richgo是一个为go test
输出添加文本装饰的工具,能够美化测试结果的显示。
但作者现在不推荐使用richgo,认为它只是对go test
标准输出的解析和调整,建议用户适应原生go test
的输出格式,并培养从原生输出中查找错误的能力。
安装方法
# 使用go get安装
go get -u github.com/kyoh86/richgo
# 使用homebrew安装
brew install kyoh86/tap/richgo
# 使用asdf安装
asdf plugin add richgo
asdf install richgo 0.3.6
基本使用
richgo test ./...
在现有管道中使用
如果你的构建脚本需要与go test
的标准输出格式交互(例如使用go-junit-report),可以使用testfilter
子命令:
go test ./... | tee >(richgo testfilter) | go-junit-report
设置别名
你可以设置别名让go test
输出美化后的结果:
# 在~/.bashrc或~/.zshrc中添加
alias go=richgo
配置文件
richgo支持通过配置文件自定义样式。它会按以下顺序查找配置文件:
${CWD}/.richstyle
${CWD}/.richstyle.yaml
${CWD}/.richstyle.yml
${GOPATH}/.richstyle
${GOPATH}/.richstyle.yaml
${GOPATH}/.richstyle.yml
${GOROOT}/.richstyle
${GOROOT}/.richstyle.yaml
${GOROOT}/.richstyle.yml
${HOME}/.richstyle
${HOME}/.richstyle.yaml
${HOME}/.richstyle.yml
设置环境变量RICHGO_LOCAL=1
可以让richgo只加载当前目录下的配置文件。
配置文件格式
目前richgo只支持YAML格式的配置文件:
# 行类型标签样式
labelType: (long | short | none)
# 构建行的样式
buildStyle:
hide: (true | false) # 是否隐藏行
bold: (true | false) # 加粗
faint: (true | false) # 减弱
italic: (true | false) # 斜体
underline: (true | false) # 下划线
blinkSlow: (true | false) # 慢速闪烁
blinkRapid: (true | false) # 快速闪烁
inverse: (true | false) # 反转前景色和背景色
conceal: (true | false) # 隐藏
crossOut: (true | false) # 删除线
frame: (true | false) # 边框
encircle: (true | false) # 环绕
overline: (true | false) # 上划线
foreground: "#xxxxxx" # 前景色
background: "#xxxxxx" # 背景色
# 其他行类型样式
startStyle: # 同上
passStyle: # 同上
failStyle: # 同上
skipStyle: # 同上
fileStyle: # 同上
lineStyle: # 同上
passPackageStyle: # 同上
failPackageStyle: # 同上
# 覆盖率阈值
coverThreshold: (0-100)
# 覆盖率高于阈值时的样式
coveredStyle: # 同上
# 覆盖率低于阈值时的样式
uncoveredStyle: # 同上
# 要删除的行(正则表达式)
removals:
- (regexp)
# 是否保留Test前缀
leaveTestPrefix: (true | false)
默认配置
labelType: long
buildStyle:
bold: true
foreground: yellow
startStyle:
foreground: lightBlack
passStyle:
foreground: green
failStyle:
bold: true
foreground: red
skipStyle:
foreground: lightBlack
passPackageStyle:
foreground: green
hide: true
failPackageStyle:
bold: true
foreground: red
hide: true
coverThreshold: 50
coveredStyle:
foreground: green
uncoveredStyle:
bold: true
foreground: yellow
fileStyle:
foreground: cyan
lineStyle:
foreground: magenta
强制着色
默认情况下,richgo会根据是否连接到TTY来决定是否着色。要强制着色,可以设置:
RICHGO_FORCE_COLOR=1 richgo test ./... | tee test.log
获取richgo版本
从Go 1.18开始,版本信息嵌入在二进制文件中:
go version -m $(command -v richgo) | awk '$1 == "mod" && $2 == "github.com/kyoh86/richgo" {print $3;}'
许可证
richgo使用MIT许可证。
更多关于golang终端输出美化与文本装饰增强插件richgo的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang终端输出美化与文本装饰增强插件richgo的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
RichGo - Golang终端输出美化与文本装饰增强工具
RichGo 是一个用于增强 Go 程序终端输出的工具,它提供了丰富的文本装饰功能,让命令行程序的输出更加美观和易读。
RichGo 主要特性
- 支持彩色文本输出
- 支持多种文本样式(粗体、斜体、下划线等)
- 支持表格形式的输出
- 支持进度条显示
- 支持语法高亮
- 支持表情符号
安装 RichGo
go get github.com/kyoh86/richgo
基本使用示例
1. 彩色文本输出
package main
import (
"github.com/kyoh86/richgo/color"
)
func main() {
color.Red("这是红色文字")
color.Green("这是绿色文字")
color.Blue("这是蓝色文字")
color.Yellow("这是黄色文字")
// 带背景色的文字
color.BgRed("红色背景")
color.BgGreen("绿色背景")
// 组合样式
color.New(color.FgRed, color.BgWhite, color.Bold).Println("红字白底加粗")
}
2. 表格输出
package main
import (
"github.com/kyoh86/richgo/table"
)
func main() {
t := table.New("ID", "Name", "Age")
t.AddRow("1", "Alice", "25")
t.AddRow("2", "Bob", "30")
t.AddRow("3", "Charlie", "28")
t.Print()
}
3. 进度条
package main
import (
"time"
"github.com/kyoh86/richgo/progress"
)
func main() {
bar := progress.New(100)
for i := 0; i <= 100; i++ {
time.Sleep(100 * time.Millisecond)
bar.Increment()
}
bar.Finish()
}
4. 语法高亮
package main
import (
"github.com/kyoh86/richgo/highlight"
)
func main() {
code := `package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}`
highlight.Print(code, "go")
}
5. 组合使用多种样式
package main
import (
"github.com/kyoh86/richgo/color"
"github.com/kyoh86/richgo/table"
)
func main() {
// 创建带颜色的表格
t := table.New(
color.New(color.FgBlue, color.Bold).Sprint("ID"),
color.New(color.FgGreen, color.Bold).Sprint("Name"),
color.New(color.FgYellow, color.Bold).Sprint("Score"),
)
t.AddRow("1", "Alice", color.Green("95"))
t.AddRow("2", "Bob", color.Yellow("85"))
t.AddRow("3", "Charlie", color.Red("65"))
t.Print()
}
高级用法
自定义主题
package main
import (
"github.com/kyoh86/richgo/color"
)
func main() {
// 自定义颜色主题
myTheme := color.NewTheme()
myTheme.Set("info", color.New(color.FgBlue, color.Bold))
myTheme.Set("warning", color.New(color.FgYellow, color.Bold))
myTheme.Set("error", color.New(color.FgRed, color.Bold))
myTheme.Get("info").Println("这是一条信息")
myTheme.Get("warning").Println("这是一个警告")
myTheme.Get("error").Println("这是一个错误")
}
响应式表格
package main
import (
"github.com/kyoh86/richgo/table"
)
func main() {
data := []struct {
ID string
Name string
Email string
}{
{"1", "Alice", "alice@example.com"},
{"2", "Bob", "bob@example.com"},
{"3", "Charlie", "charlie@example.com"},
}
t := table.New("ID", "Name", "Email")
for _, item := range data {
t.AddRow(item.ID, item.Name, item.Email)
}
// 根据终端宽度自动调整
t.AutoSize()
t.Print()
}
注意事项
- RichGo 主要适用于终端环境,在非终端环境下可能无法正常显示效果
- 某些旧终端可能不支持所有颜色和样式
- 在使用颜色时要注意可读性,避免使用对比度低的颜色组合
- 表格输出在内容过长时会自动换行,可能影响美观
RichGo 为 Go 程序的终端输出提供了丰富的装饰功能,合理使用可以大大提升命令行工具的用户体验。