cover_image

golang每日一库之fatih/color

大大大月饼 大大大月饼
2025年03月13日 03:23
图片

fatih/color 是一个流行的 Go 语言库,用于在终端中输出彩色文本和样式化的内容。由开发者 Fatih Arslan 创建,它简化了 ANSI 转义码的使用,使开发者能够轻松为 CLI 工具、日志系统等添加颜色和样式。


特点

  1. 丰富的颜色和样式支持

    • 颜色
      :支持 16 种基础前景色(如红色、绿色)和背景色。
    • 样式
      :支持加粗(bold)、斜体(italic)、下划线(underline)、反色(inverse)等。
    • 自定义颜色
      :支持 256 色(16位)和 RGB 真彩色(需终端支持)。
  2. 跨平台兼容

    • 自动检测系统环境(如 Windows),并在不支持 ANSI 时禁用颜色输出。
  3. 链式调用与组合

    • 通过链式方法(如 color.New(color.FgRed).Add(color.Bold))组合多种样式。
  4. 高性能

    • 避免重复初始化,通过预定义颜色对象复用样式。

安装

go get github.com/fatih/color



基础使用

1. 直接使用预定义颜色函数

package main
import "github.com/fatih/color"
func main() {    color.Red("这是红色文本")    color.Blue("这是蓝色文本")    color.New(color.FgWhite, color.BgGreen).Println("白字绿底")    color.Green("%s 和 %s", "绿色文本", "更多绿色")}


2. 自定义颜色对象

// 创建自定义样式customColor := color.New(color.FgCyan, color.Bold, color.Underline)customColor.Println("青色、加粗、下划线文本")


3. 禁用/启用颜色

color.NoColor = true  // 全局禁用颜色color.NoColor = false // 启用颜色(默认)



进阶

1. 组合多种样式

// 链式调用组合样式errorStyle := color.New(color.FgRed, color.Bold).Add(color.BgWhite)errorStyle.Println("错误提示:红色加粗白底")


2. 使用 256 色或 RGB

// 256 色c := color.New(color.Color(196)) // 鲜艳的红色c.Println("256 色模式")
// RGB 真彩色(需终端支持)rgbColor := color.NewRGB(255, 0, 128) // R=255, G=0, B=128rgbColor.Println("RGB 真彩色文本")


3. 格式化输出

// 类似 fmt.Printfcolor.Yellow("用户 %s 登录失败,尝试次数:%d", "Alice", 5)
// 返回字符串(不直接输出)msg := color.HiGreenString("成功!")fmt.Println(msg)



跨平台

  • Windows
    :库内部使用 golang.org/x/sys/windows 自动启用 ANSI 支持(Win10+)。
  • 其他系统
    :默认启用 ANSI 转义码,老旧终端可能不支持部分样式。

应用场景

  1. CLI 工具
    :高亮关键信息(如成功/错误)。
  2. 日志系统
    :区分不同级别的日志(ERROR 红色、INFO 绿色)。
  3. 测试框架
    :彩色化测试结果(通过/失败)。
  4. 交互式终端
    :增强用户输入提示。

示例代码

package main
import (    "github.com/fatih/color")
func main() {    // 错误信息(红色加粗)    errorColor := color.New(color.FgRed, color.Bold)    errorColor.Println("错误:文件未找到")
    // 警告信息(黄色下划线)    color.Yellow("警告:磁盘空间不足")
    // 成功信息(绿色背景)    successColor := color.New(color.FgBlack, color.BgGreen)    successColor.Printf("状态:%s\n", "完成")
    // 自定义 RGB 颜色    rgb := color.NewRGB(0, 255, 255) // 青色    rgb.Println("RGB 彩色文本")}




xu要注意

  1. 部分老旧终端可能不支持所有样式(如 RGB)。
  2. 在非交互式环境(如重定向到文件)中应自动禁用颜色。

通过 fatih/color,可以轻松为终端应用增加可视化效果,提升用户体验。


标题:golang每日一库之fatih/color
作者:mooncakeee
地址:http://blog.dd95828.com/articles/2025/03/13/1741835792048.html


继续滑动看下一个
大大大月饼
向上滑动看下一个