2025年3月25日 星期二 甲辰(龙)年 月廿四 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Go语言

gookit/color 基于 Golang 下的命令行色彩使用库

时间:12-14来源:作者:点击数:5
CDSY,CDSY.XYZ

Golang下的命令行色彩使用库,拥有丰富的色彩渲染输出,通用的API方法,兼容 Windows 系统

基本颜色预览:

现在,256 色和 RGB 色彩也已经支持 Windows CMD 和 PowerShell 中工作:

功能特色

  • 使用简单方便
  • 支持丰富的颜色输出, 16色(4bit),256色(8bit),RGB色彩(24bit, RGB)
    • 16色(4bit)是最常用和支持最广的,支持Windows cmd.exe
    • 自 v1.2.4 起 256色(8bit),RGB色彩(24bit)均支持Windows CMD和PowerShell终端
    • 请查看 this gist 了解支持RGB色彩的终端
  • 提供通用的API方法:Print Printf Println Sprint Sprintf
  • 同时支持html标签式的颜色渲染,除了使用内置标签,同时支持自定义颜色属性
    • 例如: this an <green>message</> 标签内部的文本将会渲染为绿色字体
    • 自定义颜色属性: 支持使用16色彩名称,256色彩值,rgb色彩值以及hex色彩值
  • 基础色彩: Bold Black White Gray Red Green Yellow Blue Magenta Cyan
  • 扩展风格: Info Note Light Error Danger Notice Success Comment Primary Warning Question Secondary
  • 支持通过设置环境变量 NO_COLOR 来禁用色彩,或者使用 FORCE_COLOR 来强制使用色彩渲染.
  • 支持 Rgb, 256, 16 色彩之间的互相转换
  • 支持Linux、Mac,同时兼容Windows系统环境

安装

  • go get github.com/gookit/color

快速开始

如下,引入当前包就可以快速的使用

  • package main
  • import (
  • "fmt"
  • "github.com/gookit/color"
  • )
  • func main() {
  • // 简单快速的使用,跟 fmt.Print* 类似
  • color.Redp("Simple to use color")
  • color.Redln("Simple to use color")
  • color.Greenp("Simple to use color\n")
  • color.Cyanln("Simple to use color")
  • color.Yellowln("Simple to use color")
  • // 简单快速的使用,跟 fmt.Print* 类似
  • color.Red.Println("Simple to use color")
  • color.Green.Print("Simple to use color\n")
  • color.Cyan.Printf("Simple to use %s\n", "color")
  • color.Yellow.Printf("Simple to use %s\n", "color")
  • // use like func
  • red := color.FgRed.Render
  • green := color.FgGreen.Render
  • fmt.Printf("%s line %s library\n", red("Command"), green("color"))
  • // 自定义颜色
  • color.New(color.FgWhite, color.BgBlack).Println("custom color style")
  • // 也可以:
  • color.Style{color.FgCyan, color.OpBold}.Println("custom color style")
  • // internal style:
  • color.Info.Println("message")
  • color.Warn.Println("message")
  • color.Error.Println("message")
  • // 使用内置颜色标签
  • color.Print("<suc>he</><comment>llo</>, <cyan>wel</><red>come</>\n")
  • // 自定义标签: 支持使用16色彩名称,256色彩值,rgb色彩值以及hex色彩值
  • color.Println("<fg=11aa23>he</><bg=120,35,156>llo</>, <fg=167;bg=232>wel</><fg=red>come</>")
  • // apply a style tag
  • color.Tag("info").Println("info style text")
  • // prompt message
  • color.Info.Prompt("prompt style message")
  • color.Warn.Prompt("prompt style message")
  • // tips message
  • color.Info.Tips("tips style message")
  • color.Warn.Tips("tips style message")
  • }

运行 demo: go run ./_examples/demo.go

基础颜色(16-color)

提供通用的API方法:Print Printf Println Sprint Sprintf

支持在windows cmd.exe powerShell 等终端使用

  • color.Bold.Println("bold message")
  • color.Black.Println("bold message")
  • color.White.Println("bold message")
  • color.Gray.Println("bold message")
  • color.Red.Println("yellow message")
  • color.Blue.Println("yellow message")
  • color.Cyan.Println("yellow message")
  • color.Yellow.Println("yellow message")
  • color.Magenta.Println("yellow message")
  • // Only use foreground color
  • color.FgCyan.Printf("Simple to use %s\n", "color")
  • // Only use background color
  • color.BgRed.Printf("Simple to use %s\n", "color")

运行demo: go run ./_examples/color_16.go

构建风格

  • // 仅设置前景色
  • color.FgCyan.Printf("Simple to use %s\n", "color")
  • // 仅设置背景色
  • color.BgRed.Printf("Simple to use %s\n", "color")
  • // 完全自定义: 前景色 背景色 选项
  • style := color.New(color.FgWhite, color.BgBlack, color.OpBold)
  • style.Println("custom color style")
  • // 也可以:
  • color.Style{color.FgCyan, color.OpBold}.Println("custom color style")

直接设置控制台属性:

  • // 设置console颜色
  • color.Set(color.FgCyan)
  • // 输出信息
  • fmt.Print("message")
  • // 重置console颜色
  • color.Reset()

当然,color已经内置丰富的色彩风格支持

扩展风格方法

提供通用的API方法:Print Printf Println Sprint Sprintf

支持在windows cmd.exe powerShell 等终端使用

基础使用:

  • // print message
  • color.Info.Println("Info message")
  • color.Note.Println("Note message")
  • color.Notice.Println("Notice message")
  • color.Error.Println("Error message")
  • color.Danger.Println("Danger message")
  • color.Warn.Println("Warn message")
  • color.Debug.Println("Debug message")
  • color.Primary.Println("Primary message")
  • color.Question.Println("Question message")
  • color.Secondary.Println("Secondary message")

Run demo: go run ./_examples/theme_basic.go

简约提示风格

  • color.Info.Tips("Info tips message")
  • color.Note.Tips("Note tips message")
  • color.Notice.Tips("Notice tips message")
  • color.Error.Tips("Error tips message")
  • color.Danger.Tips("Danger tips message")
  • color.Warn.Tips("Warn tips message")
  • color.Debug.Tips("Debug tips message")
  • color.Primary.Tips("Primary tips message")
  • color.Question.Tips("Question tips message")
  • color.Secondary.Tips("Secondary tips message")

Run demo: go run ./_examples/theme_tips.go

着重提示风格

  • color.Info.Prompt("Info prompt message")
  • color.Note.Prompt("Note prompt message")
  • color.Notice.Prompt("Notice prompt message")
  • color.Error.Prompt("Error prompt message")
  • color.Danger.Prompt("Danger prompt message")

Run demo: go run ./_examples/theme_prompt.go

强调提示风格

  • color.Warn.Block("Warn block message")
  • color.Debug.Block("Debug block message")
  • color.Primary.Block("Primary block message")
  • color.Question.Block("Question block message")
  • color.Secondary.Block("Secondary block message")

Run demo: go run ./_examples/theme_block.go

256 色彩使用

256色彩在 v1.2.4 后支持Windows CMD,PowerShell 环境

使用前景或后景色

  • color.C256(val uint8, isBg ...bool) Color256
  • c := color.C256(132) // fg color
  • c.Println("message")
  • c.Printf("format %s", "message")
  • c := color.C256(132, true) // bg color
  • c.Println("message")
  • c.Printf("format %s", "message")

使用 256 色彩风格

可同时设置前景和背景色

  • color.S256(fgAndBg ...uint8) *Style256
  • s := color.S256(32, 203)
  • s.Println("message")
  • s.Printf("format %s", "message")

可以同时添加选项设置:

  • s := color.S256(32, 203)
  • s.SetOpts(color.Opts{color.OpBold})
  • s.Println("style with options")
  • s.Printf("style with %s\n", "options")

运行 demo: go run ./_examples/color_256.go

RGB/True色彩使用

RGB色彩在 v1.2.4 后支持 Windows CMDPowerShell 环境

效果预览:

运行 demo: Run demo: go run ./_examples/color_rgb.go

代码示例:

  • color.RGB(30, 144, 255).Println("message. use RGB number")
  • color.HEX("#1976D2").Println("blue-darken")
  • color.HEX("#D50000", true).Println("red-accent. use HEX style")
  • color.RGBStyleFromString("213,0,0").Println("red-accent. use RGB number")
  • color.HEXStyle("eee", "D50000").Println("deep-purple color")

使用前景或后景色

  • color.RGB(r, g, b uint8, isBg ...bool) RGBColor
  • c := color.RGB(30,144,255) // fg color
  • c.Println("message")
  • c.Printf("format %s", "message")
  • c := color.RGB(30,144,255, true) // bg color
  • c.Println("message")
  • c.Printf("format %s", "message")
  • color.HEX(hex string, isBg ...bool) RGBColor 从16进制颜色创建
  • c := color.HEX("ccc") // 也可以写为: "cccccc" "#cccccc"
  • c.Println("message")
  • c.Printf("format %s", "message")
  • c = color.HEX("aabbcc", true) // as bg color
  • c.Println("message")
  • c.Printf("format %s", "message")

使用RGB风格

可同时设置前景和背景色

  • color.NewRGBStyle(fg RGBColor, bg ...RGBColor) *RGBStyle
  • s := color.NewRGBStyle(RGB(20, 144, 234), RGB(234, 78, 23))
  • s.Println("message")
  • s.Printf("format %s", "message")
  • color.HEXStyle(fg string, bg ...string) *RGBStyle 从16进制颜色创建
  • s := color.HEXStyle("11aa23", "eee")
  • s.Println("message")
  • s.Printf("format %s", "message")
  • 可以同时添加选项设置:
  • s := color.HEXStyle("11aa23", "eee")
  • s.SetOpts(color.Opts{color.OpBold})
  • s.Println("style with options")
  • s.Printf("style with %s\n", "options")

使用颜色标签

支持 在windows cmd.exe PowerShell 使用

使用内置的颜色标签,可以非常方便简单的构建自己需要的任何格式

同时支持自定义颜色属性: 支持使用16色彩名称,256色彩值,rgb色彩值以及hex色彩值

  • // 使用内置的 color tag
  • color.Print("<suc>he</><comment>llo</>, <cyan>wel</><red>come</>")
  • color.Println("<suc>hello</>")
  • color.Println("<error>hello</>")
  • color.Println("<warning>hello</>")
  • // 自定义颜色属性
  • color.Print("<fg=yellow;bg=black;op=underscore;>hello, welcome</>\n")
  • // 自定义颜色属性: 支持使用16色彩名称,256色彩值,rgb色彩值以及hex色彩值
  • color.Println("<fg=11aa23>he</><bg=120,35,156>llo</>, <fg=167;bg=232>wel</><fg=red>come</>")
  • 使用 color.Tag

给后面输出的文本信息加上给定的颜色风格标签

  • // set a style tag
  • color.Tag("info").Print("info style text")
  • color.Tag("info").Printf("%s style text", "info")
  • color.Tag("info").Println("info style text")

运行 demo: go run ./_examples/color_tag.go

颜色转换

支持 Rgb, 256, 16 色彩之间的互相转换 Rgb <=> 256 <=> 16

  • basic := color.Red
  • basic.Println("basic color")
  • c256 := color.Red.C256()
  • c256.Println("256 color")
  • c256.C16().Println("basic color")
  • rgb := color.Red.RGB()
  • rgb.Println("rgb color")
  • rgb.C256().Println("256 color")

方法参考

一些有用的工具方法参考

  • Disable() disable color render
  • SetOutput(io.Writer) custom set the colored text output writer
  • ForceOpenColor() force open color render
  • ClearCode(str string) string Use for clear color codes
  • Colors2code(colors ...Color) string Convert colors to code. return like "32;45;3"
  • ClearTag(s string) string clear all color html-tag for a string
  • IsConsole(w io.Writer) Determine whether w is one of stderr, stdout, stdin
  • HexToRgb(hex string) (rgb []int) Convert hex color string to RGB numbers
  • RgbToHex(rgb []int) string Convert RGB to hex code
  • 更多请查看文档 https://pkg.go.dev/github.com/gookit/color

使用 color 的项目

看看这些使用了 https://github.com/gookit/color 的项目:

  • https://github.com/Delta456/box-cli-maker Make Highly Customized Boxes for your CLI

参考项目

github 地址:https://github.com/gookit/color

CDSY,CDSY.XYZ
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐