0%

color - 让你的输出带点颜色

color

color 是一个可以让你输出带颜色文本的库。

安装

1
go get github.com/fatih/color

示例

  1. 输出到控制台
1
2
3
4
5
6
7
8
9
// 这会直接输出到控制台
color.Cyan("Prints text in cyan.")

// 每个调用末尾会自动加上换行
color.Blue("Prints %s in blue.", "text")

// 这种调用使用默认的背景色
color.Red("We have red")
color.Magenta("And many others ..")

效果:

  1. 混合样式:颜色 + 粗体/斜体、下划线等
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 创建一个新的 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.")

效果:

  1. 使用自定义的输出方向(实现了 io.Writer 即可):比如文件等
1
2
3
4
5
// 使用自定义的 `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.")
  1. 自定义 print 函数:PrintFunc
1
2
3
4
5
6
7
8
// 创建一个新的自定义的 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...")
  1. 自定义 fprint 函数:FprintFunc
1
2
3
4
5
6
7
// 创建一个自定义的 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...")
  1. 无颜色字符串里面穿插有颜色的字符串
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 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"))
  1. 在现有的代码上使用
1
2
3
4
5
6
7
8
9
10
11
12
13
// 在 `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() // 函数结束的时候 Unset

fmt.Println("All text will now be bold magenta.")

禁用颜色

1
color.NoColor = true

其他解决方案

  1. gookit/color

  2. lucasb-eyer/go-colorful