如何使用Go标准库设置文本颜色:按数值正负显示红绿
用Go标准库实现终端文本颜色区分
嘿,这个需求完全可以通过ANSI转义序列来实现,不需要任何第三方包——毕竟现代终端几乎都支持这套标准的文本控制码。
核心原理
终端通过特定的转义字符序列来改变文本样式,其中:
- 红色前景色:
\033[31m - 绿色前景色:
\033[32m - 重置所有样式(必须加!不然后续文本都会保持颜色):
\033[0m
修改后的代码实现
直接把这些转义码嵌入到你要打印的字符串里就行,甚至可以定义常量让代码更清晰:
package main import "fmt" // 定义颜色常量提升可读性 const ( colorRed = "\033[31m" colorGreen = "\033[32m" colorReset = "\033[0m" ) func main() { x := -3 // 可以换成正数、0测试不同情况 if x < 0 { fmt.Printf("%sThis line will be Red%s\n", colorRed, colorReset) // 或者用fmt.Println:fmt.Println(colorRed + "This line will be Red" + colorReset) } else if x > 0 { fmt.Printf("%sThis line will be Green%s\n", colorGreen, colorReset) } else { fmt.Println("This line uses default terminal color") } }
注意事项
- 必须加重置码:如果省略
colorReset,后续所有终端输出都会保持当前颜色,这通常不是你想要的结果。 - 终端兼容性:旧版Windows命令提示符(cmd.exe)可能不支持ANSI转义码,但Windows Terminal、PowerShell,以及Linux/macOS的所有主流终端都完美支持。如果必须兼容旧cmd,那得调用Windows系统API,但这超出了标准库范围——不过一般现代场景下不需要考虑这个。
内容的提问来源于stack exchange,提问作者Shahed Ahmed
相关产品推荐
相关产品推荐

