Go 终端颜色
最后修改时间 2024 年 4 月 11 日
在本文中,我们将展示如何输出终端彩色输出。
过去,在 Windows 终端上无法显示颜色。随着现代 Windows 终端应用程序的引入,这种情况已经改变。
要显示彩色输出,我们将使用特殊的转义序列。我们还使用 fatih/color
和 aurora
包。
转义序列
ANSI 转义序列是用于控制终端模拟器中光标位置、颜色、字体样式和其他选项的标准。
package main import ( "fmt" ) func main() { msg := "an old falcon" reset := "\033[0m" bold := "\033[1m" underline := "\033[4m" strike := "\033[9m" italic := "\033[3m" cRed := "\033[31m" cGreen := "\033[32m" cYellow := "\033[33m" cBlue := "\033[34m" cPurple := "\033[35m" cCyan := "\033[36m" cWhite := "\033[37m" fmt.Println(msg) fmt.Println(cRed + msg) fmt.Println(cGreen + msg) fmt.Println(cYellow + msg) fmt.Println(cBlue + msg) fmt.Println(cPurple + msg) fmt.Println(cWhite + msg) fmt.Println(cCyan + msg + reset) fmt.Println(bold + msg) fmt.Println(italic + msg + reset) fmt.Println(strike + msg + reset) fmt.Println(underline + msg + reset) fmt.Println(msg) }
在程序中,我们以彩色和常见的样式(如粗体和斜体)显示消息。
reset := "\033[0m"
重置信号用于终止当前的颜色或样式信号。
bold := "\033[1m" underline := "\033[4m" strike := "\033[9m" italic := "\033[3m"
这些是使用转义码定义的四种常见文本样式。
cRed := "\033[31m" cGreen := "\033[32m" cYellow := "\033[33m" cBlue := "\033[34m" cPurple := "\033[35m" cCyan := "\033[36m" cWhite := "\033[37m"
这些是基本颜色的代码。
fmt.Println(cRed + msg) fmt.Println(cGreen + msg) fmt.Println(cYellow + msg)
要以彩色显示文本,我们在文本前加上转义序列。
fmt.Println(bold + msg) fmt.Println(italic + msg + reset)
转义序列可以组合。第一条消息以粗体显示。由于它没有以重置代码终止,因此下一条消息以粗体和斜体显示。
使用 faith/color 的终端颜色
faith/color
包允许我们使用 ANSI Escape 代码进行着色输出。它本质上是这些代码的一个易于使用的包装器。该包有多种设置终端颜色输出的方式。
package main import ( "fmt" "github.com/fatih/color" ) func main() { msg := "an old falcon" fmt.Println(msg) color.Set(color.FgHiBlue) fmt.Println(msg) fmt.Println(msg) color.Unset() fmt.Println(msg) }
在程序中,我们使用 Set
和 Unset
函数来界定输出设置为特定颜色的区域。
color.Set(color.FgHiBlue)
我们将颜色设置为蓝色。
color.Unset()
我们取消设置颜色。调用函数后,输出恢复为默认颜色。
在下一个示例中,我们使用内置函数以彩色显示文本。
package main import ( "fmt" "github.com/fatih/color" ) func main() { color.Green("%d old falcons", 4) color.Red("%d old falcons", 3) color.Yellow("%d old falcon", 1) fmt.Println() red := color.New(color.FgRed, color.BgHiWhite, color.Bold, color.Italic, color.Underline) msg := "an old falcon" red.Println(msg) }
我们以彩色打印几条消息。
color.Green("%d old falcons", 4) color.Red("%d old falcons", 3) color.Yellow("%d old falcon", 1)
这些是用于以绿色、红色和黄色显示消息的三种内置函数。
red := color.New(color.FgRed, color.BgHiWhite, color.Bold, color.Italic, color.Underline) msg := "an old falcon" red.Println(msg)
我们可以组合各种样式。除了前景颜色,我们还可以设置背景颜色。
使用 aurora 的终端颜色
Aurora 是最复杂的 ANSI 颜色代码包。它直接支持 Printf/Sprintf 方法。
package main import ( "fmt" "github.com/logrusorgru/aurora/v4" ) func main() { msg := " an old falcon " fmt.Println(aurora.Gray(0, msg).BgGray(23)) fmt.Println(aurora.Gray(3, msg).BgGray(19)) fmt.Println(aurora.Gray(7, msg).BgGray(15)) fmt.Println(aurora.Gray(11, msg).BgGray(13)) fmt.Println(aurora.Gray(15, msg).BgGray(7)) fmt.Println(aurora.Gray(19, msg).BgGray(3)) fmt.Println(aurora.Gray(23, msg).BgGray(0)) }
在程序中,我们显示灰色阴影的消息。
fmt.Println(aurora.Gray(0, msg).BgGray(23))
我们链接了两个函数调用:Gray
和 BgGray
。第一个设置前景颜色,第二个设置背景颜色。索引是 0 到 24 的值。
我们可以将 Aurora 函数与 Printf
和 Sprintf
函数一起使用。
package main import ( "fmt" "github.com/logrusorgru/aurora/v4" ) func main() { msg := "an old falcon" fmt.Println(msg, aurora.BrightBlue("in the sky")) fmt.Printf("%s in the sky\n", aurora.Bold(aurora.BrightBlue(msg))) fmt.Println(aurora.Sprintf(aurora.Blue("John Doe is a %s"), aurora.Green("gardener"))) }
该程序展示了如何使用 Printf
和 Sprintf
函数显示彩色文本。
ColorIndex
是预定义的 8 位前景或背景颜色的索引,范围从 0 到 255。
- 0 - 7 - 标准颜色
- 8 - 15 - 高强度颜色
- 16 - 231 - 216 种基本颜色
- 232 - 255 - 灰度颜色
package main import ( "fmt" "github.com/logrusorgru/aurora/v4" ) func main() { msg := "an old falcon" for i := 1; i <= 255; i++ { fmt.Printf("%3d %s %s\n", i, aurora.Index(aurora.ColorIndex(i), msg), aurora.BgIndex(aurora.ColorIndex(i), msg)) } }
在程序中,我们展示了 255 种前景和背景文本颜色组合。
来源
在本文中,我们在 Golang 的终端应用程序中创建了彩色输出。我们使用了 ANSI 转义码和两个库。