golang终端ANSI颜色样式美化与布局插件库go-palette的使用

Golang终端ANSI颜色样式美化与布局插件库go-palette的使用

介绍

Go-Palette是一个优雅方便的ANSI颜色样式定义库,完全兼容并包装了fmt库,用于创建美观的终端布局。

Go-Palette

示例输出

支持的颜色与格式

标准颜色

标准颜色

以下颜色名称可用于前景和背景:

颜色名称 颜色代码
Black 0
Red 1
Green 2
Yellow 3
Blue 4
Magenta 5
Cyan 6
White 7
BrightBlack 8
BrightRed 9
BrightGreen 10
BrightYellow 11
BrightBlue 12
BrightMagenta 13
BrightCyan 14
BrightWhite 15

支持的前景色板

前景色板

支持的背景色板

背景色板

支持的文本格式

支持以下文本格式:

  • Reset
  • Bold
  • Dim
  • Italic
  • Underline
  • SlowBlink
  • Hidden
  • Strikethrough

特殊效果

安装

go get github.com/abusomani/go-palette

使用示例

基本导入

import (
    pal "github.com/abusomani/go-palette/palette"
)

使用颜色名称示例

package main

import (
	pal "github.com/abusomani/go-palette/palette"
)

func main() {
	p := pal.New()
	p.Println("This text is going to be in default color.")
	p.SetOptions(pal.WithBackground(pal.Color(pal.BrightYellow)), pal.WithForeground(pal.Black))
	p.Println("This text is going to be in black color with a yellow background.")
}

代码输出

使用颜色代码示例

package main

import (
	pal "github.com/abusomani/go-palette/palette"
)

func main() {
	p := pal.New()
	p.Println("This text is going to be in default color.")
	// 我们可以使用色板中的颜色代码来设置前景和背景颜色
	p.SetOptions(pal.WithBackground(pal.Color(11)), pal.WithForeground(0))
	p.Println("This text is going to be in black color with a yellow background.")
}

使用特殊效果示例

package main

import (
	pal "github.com/abusomani/go-palette/palette"
)

func main() {
	p := pal.New(pal.WithSpecialEffects([]pal.Special{pal.Bold}))
	p.Println("Bold")
	p.SetOptions(pal.WithSpecialEffects([]pal.Special{pal.Dim}))
	p.Println("Dim")
	p.SetOptions(pal.WithSpecialEffects([]pal.Special{pal.Italic}))
	p.Println("Italic")
	p.SetOptions(pal.WithSpecialEffects([]pal.Special{pal.Underline}))
	p.Println("Underline")
	p.SetOptions(pal.WithSpecialEffects([]pal.Special{pal.SlowBlink}))
	p.Println("SlowBlink")
	p.SetOptions(pal.WithSpecialEffects([]pal.Special{pal.Hidden}))
	p.Print("Hidden")
	p.SetOptions(pal.WithDefaults())
	p.Println("<-Hidden")
	p.SetOptions(pal.WithSpecialEffects([]pal.Special{pal.Strikethrough}))
	p.Println("Strikethrough")
}

重置选项示例

package main

import (
	pal "github.com/abusomani/go-palette/palette"
)

func main() {
	p := pal.New()
	p.Println("This text is going to be in default color.")
	// 我们可以使用色板中的颜色代码来设置前景和背景颜色
	p.SetOptions(pal.WithBackground(pal.BrightMagenta), pal.WithForeground(pal.Black))
	p.Println("This text is going to be in black color with a bright magenta background.")
	p.Flush()
	p.Println("This text is going to be in default color.")
}

重置输出

局限性

Windows系统

Go-Palette仅提供ANSI颜色。Windows系统默认不支持ANSI。要启用ANSI颜色支持,请参考相关教程。

特殊效果在不同终端中的差异

Go-Palette通过ANSI转义序列提供样式支持。不同终端的行为可能会有所不同。更多详情请参考ANSI转义代码。

许可证

Go-Palette采用MIT许可证授权。


更多关于golang终端ANSI颜色样式美化与布局插件库go-palette的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang终端ANSI颜色样式美化与布局插件库go-palette的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Go-Palette: Golang终端ANSI颜色样式美化与布局插件库

go-palette 是一个用于Golang终端应用的ANSI颜色样式美化与布局插件库,它提供了简单易用的API来为终端输出添加颜色、样式和布局控制。

安装

go get github.com/abusizhishen/go-palette

基本使用

1. 基本颜色和样式

package main

import (
	"fmt"
	"github.com/abusizhishen/go-palette"
)

func main() {
	p := palette.NewPalette()
	
	// 前景色
	fmt.Println(p.Red("红色文本"))
	fmt.Println(p.Green("绿色文本"))
	fmt.Println(p.Blue("蓝色文本"))
	
	// 背景色
	fmt.Println(p.BgRed("红色背景"))
	fmt.Println(p.BgGreen("绿色背景"))
	
	// 样式
	fmt.Println(p.Bold("加粗文本"))
	fmt.Println(p.Underline("下划线文本"))
	fmt.Println(p.Italic("斜体文本"))
	
	// 组合使用
	fmt.Println(p.Bold(p.Red("红色加粗文本")))
	fmt.Println(p.BgBlue(p.Underline(p.Green("绿色下划线蓝色背景"))))
}

2. 自定义颜色

func main() {
	p := palette.NewPalette()
	
	// RGB颜色
	fmt.Println(p.Color(255, 0, 0)("自定义红色"))
	fmt.Println(p.BgColor(0, 255, 0)("自定义绿色背景"))
	
	// 16进制颜色
	fmt.Println(p.HexColor("#FF0000")("16进制红色"))
	fmt.Println(p.BgHexColor("#00FF00")("16进制绿色背景"))
}

3. 布局控制

func main() {
	p := palette.NewPalette()
	
	// 居中对齐
	fmt.Println(p.Center("居中对齐的文本", 50))
	
	// 右对齐
	fmt.Println(p.Right("右对齐的文本", 50))
	
	// 填充
	fmt.Println(p.Fill("填充文本", "-", 50))
	
	// 进度条
	fmt.Println(p.ProgressBar(30, 100, 50))
}

4. 表格输出

func main() {
	p := palette.NewPalette()
	
	headers := []string{"ID", "Name", "Age"}
	rows := [][]string{
		{"1", "Alice", "25"},
		{"2", "Bob", "30"},
		{"3", "Charlie", "35"},
	}
	
	// 简单表格
	fmt.Println(p.Table(headers, rows))
	
	// 带样式的表格
	fmt.Println(p.TableWithStyle(headers, rows, 
		palette.TableStyle{
			HeaderFg:    palette.White,
			HeaderBg:    palette.Blue,
			CellFg:      palette.Black,
			CellBg:      palette.White,
			BorderColor: palette.Red,
		}))
}

5. 主题使用

func main() {
	p := palette.NewPalette()
	
	// 定义主题
	myTheme := palette.Theme{
		"success": p.Green,
		"error":   p.Bold(p.Red),
		"warning": p.Yellow,
		"info":    p.Blue,
	}
	
	// 使用主题
	fmt.Println(myTheme["success"]("操作成功!"))
	fmt.Println(myTheme["error"]("发生错误!"))
	fmt.Println(myTheme["warning"]("警告信息"))
	fmt.Println(myTheme["info"]("提示信息"))
}

高级功能

1. 自定义样式组合

func main() {
	p := palette.NewPalette()
	
	// 创建自定义样式
	highlight := p.Compose(
		p.Bold,
		p.Underline,
		p.Color(255, 215, 0), // 金色
	)
	
	fmt.Println(highlight("高亮显示的重要文本"))
}

2. 响应式宽度处理

func main() {
	p := palette.NewPalette()
	
	// 获取终端宽度
	width := p.GetTerminalWidth()
	
	// 根据终端宽度调整输出
	fmt.Println(p.Center("自适应宽度的标题", width))
	fmt.Println(p.Fill("", "=", width))
}

3. 动画效果

func main() {
	p := palette.NewPalette()
	
	// 旋转动画
	spinner := p.NewSpinner("处理中...")
	spinner.Start()
	
	// 模拟耗时操作
	time.Sleep(3 * time.Second)
	
	spinner.Stop()
	fmt.Println(p.Green("处理完成!"))
}

注意事项

  1. 不是所有终端都支持所有ANSI颜色和样式,使用时应注意兼容性
  2. 在Windows上可能需要启用ANSI支持或使用兼容层
  3. 复杂的布局和样式可能会影响性能,特别是在大量输出时

go-palette 提供了丰富的功能来美化终端输出,通过组合各种样式和布局方法,可以创建出专业且美观的命令行界面。

回到顶部