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支持通过配置文件自定义样式。它会按以下顺序查找配置文件:

  1. ${CWD}/.richstyle
  2. ${CWD}/.richstyle.yaml
  3. ${CWD}/.richstyle.yml
  4. ${GOPATH}/.richstyle
  5. ${GOPATH}/.richstyle.yaml
  6. ${GOPATH}/.richstyle.yml
  7. ${GOROOT}/.richstyle
  8. ${GOROOT}/.richstyle.yaml
  9. ${GOROOT}/.richstyle.yml
  10. ${HOME}/.richstyle
  11. ${HOME}/.richstyle.yaml
  12. ${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

1 回复

更多关于golang终端输出美化与文本装饰增强插件richgo的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


RichGo - Golang终端输出美化与文本装饰增强工具

RichGo 是一个用于增强 Go 程序终端输出的工具,它提供了丰富的文本装饰功能,让命令行程序的输出更加美观和易读。

RichGo 主要特性

  1. 支持彩色文本输出
  2. 支持多种文本样式(粗体、斜体、下划线等)
  3. 支持表格形式的输出
  4. 支持进度条显示
  5. 支持语法高亮
  6. 支持表情符号

安装 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()
}

注意事项

  1. RichGo 主要适用于终端环境,在非终端环境下可能无法正常显示效果
  2. 某些旧终端可能不支持所有颜色和样式
  3. 在使用颜色时要注意可读性,避免使用对比度低的颜色组合
  4. 表格输出在内容过长时会自动换行,可能影响美观

RichGo 为 Go 程序的终端输出提供了丰富的装饰功能,合理使用可以大大提升命令行工具的用户体验。

回到顶部