color
color 是一个可以让你输出带颜色文本的库。
安装
go get github.com/fatih/color
示例
- 输出到控制台
// 这会直接输出到控制台
color.Cyan("Prints text in cyan.")// 每个调用末尾会自动加上换行
color.Blue("Prints %s in blue.", "text")// 这种调用使用默认的背景色
color.Red("We have red")
color.Magenta("And many others ..")
效果:
- 混合样式:颜色 + 粗体/斜体、下划线等
// 创建一个新的 color 对象,然后加上 “下划线” 样式
c := color.New(color.FgCyan).Add(color.Underline) // 下划线
c.Println("Prints cyan text with an underline.")// 创建一个新的 color 对象,颜色为 FgCyan,字体为粗体
d := color.New(color.FgCyan, color.Bold) // 粗体
d.Printf("This prints bold cyan %s\n", "too!.")// 创建一个颜色为 FgRed 的 color 对象
red := color.New(color.FgRed)// 在这个颜色为 FgRed 的 color 对象的基础上,加上 “粗体” 的样式
boldRed := red.Add(color.Bold) // 红色 + 粗体
boldRed.Println("This will print text in bold red.")// 在 红色 + 粗体 的 color 对象的基础上,加上 “白色背景” 的样式
whiteBackground := red.Add(color.BgWhite) // 红色 + 粗体 + 白色背景
whiteBackground.Println("Red text with white background.")
效果:
- 使用自定义的输出方向(实现了
io.Writer
即可):比如文件等
// 使用自定义的 `io.Writer` 保存 color 的输出
color.New(color.FgBlue).Fprintln(myWriter, "blue color!")blue := color.New(color.FgBlue)
blue.Fprint(writer, "This will print text in blue.")
- 自定义
print
函数:PrintFunc
// 创建一个新的自定义的 print 函数
red := color.New(color.FgRed).PrintfFunc()
red("Warning")
red("Error: %s", err)// 创建自定义打印函数,并且添加 粗体 + 绿色 样式
notice := color.New(color.Bold, color.FgGreen).PrintlnFunc()
notice("Don't forget this...")
- 自定义
fprint
函数:FprintFunc
// 创建一个自定义的 fprint 函数
blue := color.New(color.FgBlue).FprintfFunc()
blue(myWriter, "important notice: %s", stars)// 创建一个自定义的 fprint 函数,并且 粗体 + 绿色 字体
success := color.New(color.Bold, color.FgGreen).FprintlnFunc()
success(myWriter, "Don't forget this...")
- 无颜色字符串里面穿插有颜色的字符串
// SprintFunc 调用的效果是返回一个字符串,而不是直接输出了
yellow := color.New(color.FgYellow).SprintFunc()
red := color.New(color.FgRed).SprintFunc()
fmt.Printf("This is a %s and this is %s.\n", yellow("warning"), red("error"))info := color.New(color.FgWhite, color.BgGreen).SprintFunc()
fmt.Printf("This %s rocks!\n", info("package"))// 也可以直接使用 helper 函数
fmt.Println("This", color.RedString("warning"), "should be not neglected.")
fmt.Printf("%v %v\n", color.GreenString("Info:"), "an important message.")// windows 也支持
fmt.Fprintf(color.Output, "Windows support: %s", color.GreenString("PASS"))
- 在现有的代码上使用
// 在 `color.Set()` 和 `color.Unset()` 之间的代码会有颜色
color.Set(color.FgYellow)fmt.Println("Existing text will now be in yellow")
fmt.Printf("This one %s\n", "too")color.Unset() // 需要手动调用 Unset,否则后续代码输出都会有颜色// 也可以添加其他样式,这里加了 粗体
color.Set(color.FgMagenta, color.Bold)
defer color.Unset() // 函数结束的时候 Unsetfmt.Println("All text will now be bold magenta.")
禁用颜色
color.NoColor = true
其他解决方案
-
gookit/color
-
lucasb-eyer/go-colorful