Go语言库系列之aurora

2022-10-08,,

背景介绍

今天跟大家推荐一款可以给终端输出上色的工具--aurora

极速上手

准备工作

初始化项目

go mod init aurora

演示项目结构

.
├── go.mod
├── go.sum
└── main.go

安装aurora包

go get -u github.com/logrusorgru/aurora

代码演示

首先引入aurora库

import . "github.com/logrusorgru/aurora"

输出一个品红颜色的内容,magenta是以颜色命名的方法

fmt.println("hello,", magenta("aurora"))

再输出一个加粗的青色的名称

fmt.println(bold(cyan("cya!")))

完整代码如下

package main

import (
	"fmt"

	. "github.com/logrusorgru/aurora"
)

func main() {
	fmt.println("hello,", magenta("aurora"))
	fmt.println(bold(cyan("cya!")))
}

运行后输出内容如下

更多玩法

支持格式化输出函数

除了换行输出函数外,aurora还支持格式化输出函数

msg := fmt.sprintf("my name is %s", green("pingyeaa"))
fmt.println(msg)

链式调用

我们可以嵌套调用,来个绿底加粗红字

fmt.println(bggreen(bold(red("pingyeaa"))))

还可以进行链式调用,同样可以达到相同效果,这种方式的可读性更高一些

fmt.println(red("pingyeaa").bold().bggreen())

更简便的写法

除了链式调用外,还有一种更简便的写法,就是通过位或运算符来实现

fmt.println(colorize("greeting", greenfg|redbg|boldfm))

官方定义了10种常量,感兴趣的同学可以自行研究源码

const (

	blackbg   color = (iota << shiftbg) | flagbg // 40, 100
	redbg                                        // 41, 101
	greenbg                                      // 42, 102
	yellowbg                                     // 43, 103
	bluebg                                       // 44, 104
	magentabg                                    // 45, 105
	cyanbg                                       // 46, 106
	whitebg                                      // 47, 107

	brightbg color = ((1 << 3) << shiftbg) | flagbg // -> 100

	brownbg = yellowbg

	maskbg = (0xff << shiftbg) | flagbg
)

同样也可以搭配链式调用使用

fmt.println(red("x").colorize(greenfg))

支持灰阶

所谓灰阶,是将最亮与最暗之间的亮度变化,区分为若干份

方法中的数字代表灰色深度的数值,支持背景和文字上色

fmt.println("  ",
	gray(1-1, " 00-23 ").bggray(24-1),
	gray(4-1, " 03-19 ").bggray(20-1),
	gray(8-1, " 07-15 ").bggray(16-1),
	gray(12-1, " 11-11 ").bggray(12-1),
	gray(16-1, " 15-07 ").bggray(8-1),
	gray(20-1, " 19-03 ").bggray(4-1),
	gray(24-1, " 23-00 ").bggray(1-1),
)

支持闪烁

fmt.println(blink("blink"))

限制

格式化输出函数中的%t%p是没办法上色的

r := red("red")
var i int
fmt.printf("%t %p\n", r, green(&i))
aurora.value %!p(aurora.value={0xc42000a310 768 0})

但是可以通过在外层嵌套颜色来解决

fmt.println(red(fmt.sprintf("%t %p\n", r, green(&i))))

go语言库代码示例,欢迎star

感谢大家的观看,如果觉得文章对你有所帮助,欢迎关注公众号「平也」,聚焦go语言与技术原理。

《Go语言库系列之aurora.doc》

下载本文的Word格式文档,以方便收藏与打印。