golang实现Windows终端彩色输出插件库go-colorable的使用
go-colorable
go-colorable 是一个用于 Windows 终端的彩色输出插件库。
问题背景
在 Windows 终端中,大多数日志记录包默认不会显示颜色(虽然可以使用 ansicon 实现,但可能不是理想的解决方案)。go-colorable 可以在 Windows 上处理 ANSI 颜色转义序列。
效果对比
不使用 go-colorable 的效果
使用 go-colorable 的效果
使用方法
下面是一个完整的示例代码,展示如何在 Windows 终端中实现彩色输出:
package main
import (
"github.com/mattn/go-colorable"
"github.com/sirupsen/logrus"
)
func main() {
// 设置日志格式,强制使用颜色
logrus.SetFormatter(&logrus.TextFormatter{ForceColors: true})
// 设置输出为支持颜色的标准输出
logrus.SetOutput(colorable.NewColorableStdout())
// 输出不同级别的日志(将显示不同颜色)
logrus.Info("succeeded") // 通常显示绿色
logrus.Warn("not correct") // 通常显示黄色
logrus.Error("something error") // 通常显示红色
logrus.Fatal("panic") // 通常显示红色并退出程序
}
这段代码可以在非 Windows 操作系统上编译运行。
安装
要使用 go-colorable,首先需要通过以下命令安装:
go get github.com/mattn/go-colorable
许可证
MIT 许可证
作者
Yasuhiro Matsumoto (a.k.a mattn)
更多关于golang实现Windows终端彩色输出插件库go-colorable的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang实现Windows终端彩色输出插件库go-colorable的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
go-colorable 使用指南:在Windows终端实现彩色输出
go-colorable 是一个用于在Windows终端中实现彩色输出的Go语言库,它解决了Windows控制台默认不支持ANSI颜色代码的问题。
安装
go get github.com/mattn/go-colorable
基本使用
package main
import (
"fmt"
"github.com/mattn/go-colorable"
)
func main() {
// 创建支持颜色的输出对象
out := colorable.NewColorableStdout()
// 使用ANSI颜色代码输出彩色文本
fmt.Fprintln(out, "\x1b[31m红色文本\x1b[0m")
fmt.Fprintln(out, "\x1b[32m绿色文本\x1b[0m")
fmt.Fprintln(out, "\x1b[33m黄色文本\x1b[0m")
fmt.Fprintln(out, "\x1b[34m蓝色文本\x1b[0m")
fmt.Fprintln(out, "\x1b[35m紫色文本\x1b[0m")
fmt.Fprintln(out, "\x1b[36m青色文本\x1b[0m")
fmt.Fprintln(out, "\x1b[37m白色文本\x1b[0m")
// 带背景色的文本
fmt.Fprintln(out, "\x1b[41;37m白字红底\x1b[0m")
fmt.Fprintln(out, "\x1b[42;30m黑字绿底\x1b[0m")
// 加粗文本
fmt.Fprintln(out, "\x1b[1m加粗文本\x1b[0m")
}
高级用法
1. 同时支持标准输出和错误输出
package main
import (
"fmt"
"github.com/mattn/go-colorable"
)
func main() {
stdout := colorable.NewColorableStdout()
stderr := colorable.NewColorableStderr()
fmt.Fprintln(stdout, "\x1b[32m正常消息\x1b[0m")
fmt.Fprintln(stderr, "\x1b[31m错误消息\x1b[0m")
}
2. 创建带颜色的日志记录器
package main
import (
"log"
"os"
"github.com/mattn/go-colorable"
)
func main() {
log.SetOutput(colorable.NewColorableStdout())
log.Println("\x1b[32m[INFO]\x1b[0m 这是一条信息日志")
log.Println("\x1b[33m[WARN]\x1b[0m 这是一条警告日志")
log.Println("\x1b[31m[ERROR]\x1b[0m 这是一条错误日志")
}
3. 封装颜色函数方便使用
package main
import (
"fmt"
"github.com/mattn/go-colorable"
)
var out = colorable.NewColorableStdout()
// 定义颜色函数
func red(s string) string {
return "\x1b[31m" + s + "\x1b[0m"
}
func green(s string) string {
return "\x1b[32m" + s + "\x1b[0m"
}
func yellow(s string) string {
return "\x1b[33m" + s + "\x1b[0m"
}
func main() {
fmt.Fprintln(out, red("错误信息"))
fmt.Fprintln(out, green("成功信息"))
fmt.Fprintln(out, yellow("警告信息"))
}
ANSI颜色代码参考
代码 | 效果 |
---|---|
\x1b[0m | 重置所有属性 |
\x1b[1m | 加粗/高亮 |
\x1b[4m | 下划线 |
\x1b[30m | 黑色前景 |
\x1b[31m | 红色前景 |
\x1b[32m | 绿色前景 |
\x1b[33m | 黄色前景 |
\x1b[34m | 蓝色前景 |
\x1b[35m | 紫色前景 |
\x1b[36m | 青色前景 |
\x1b[37m | 白色前景 |
\x1b[40m | 黑色背景 |
\x1b[41m | 红色背景 |
\x1b[42m | 绿色背景 |
\x1b[43m | 黄色背景 |
\x1b[44m | 蓝色背景 |
\x1b[45m | 紫色背景 |
\x1b[46m | 青色背景 |
\x1b[47m | 白色背景 |
注意事项
- go-colorable 主要用于解决Windows终端的ANSI颜色支持问题,在Unix-like系统上也能正常工作
- 某些旧版本的Windows控制台可能仍然不支持ANSI颜色代码
- 使用颜色代码时记得在最后重置(\x1b[0m),否则后续输出都会保持该样式
- 对于更复杂的终端UI,可以考虑使用更高级的库如termbox-go或tcell
通过go-colorable,你可以轻松地为你的命令行工具添加彩色输出,提升用户体验和可读性。