背景介绍

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

每日一库之151:aurora(终端输出上色) - 图1

极速上手

准备工作

初始化项目

  1. go mod init aurora

演示项目结构

  1. .
  2. ├── go.mod
  3. ├── go.sum
  4. └── main.go

安装aurora包

  1. go get -u github.com/logrusorgru/aurora

代码演示

首先引入aurora库

  1. import . "github.com/logrusorgru/aurora"

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

  1. fmt.Println("Hello,", Magenta("Aurora"))

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

  1. fmt.Println(Bold(Cyan("Cya!")))

完整代码如下

  1. package main
  2. import (
  3. "fmt"
  4. . "github.com/logrusorgru/aurora"
  5. )
  6. func main() {
  7. fmt.Println("Hello,", Magenta("Aurora"))
  8. fmt.Println(Bold(Cyan("Cya!")))
  9. }

运行后输出内容如下

每日一库之151:aurora(终端输出上色) - 图2

更多玩法

支持格式化输出函数

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

  1. msg := fmt.Sprintf("My name is %s", Green("pingyeaa"))
  2. fmt.Println(msg)

每日一库之151:aurora(终端输出上色) - 图3

链式调用

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

  1. fmt.Println(BgGreen(Bold(Red("pingyeaa"))))

每日一库之151:aurora(终端输出上色) - 图4

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

  1. fmt.Println(Red("pingyeaa").Bold().BgGreen())

更简便的写法

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

  1. fmt.Println(Colorize("Greeting", GreenFg|RedBg|BoldFm))

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

  1. const (
  2. BlackBg Color = (iota << shiftBg) | flagBg // 40, 100
  3. RedBg // 41, 101
  4. GreenBg // 42, 102
  5. YellowBg // 43, 103
  6. BlueBg // 44, 104
  7. MagentaBg // 45, 105
  8. CyanBg // 46, 106
  9. WhiteBg // 47, 107
  10. BrightBg Color = ((1 << 3) << shiftBg) | flagBg // -> 100
  11. BrownBg = YellowBg
  12. maskBg = (0xff << shiftBg) | flagBg
  13. )

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

  1. fmt.Println(Red("x").Colorize(GreenFg))

支持灰阶

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

每日一库之151:aurora(终端输出上色) - 图5

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

  1. fmt.Println(" ",
  2. Gray(1-1, " 00-23 ").BgGray(24-1),
  3. Gray(4-1, " 03-19 ").BgGray(20-1),
  4. Gray(8-1, " 07-15 ").BgGray(16-1),
  5. Gray(12-1, " 11-11 ").BgGray(12-1),
  6. Gray(16-1, " 15-07 ").BgGray(8-1),
  7. Gray(20-1, " 19-03 ").BgGray(4-1),
  8. Gray(24-1, " 23-00 ").BgGray(1-1),
  9. )

每日一库之151:aurora(终端输出上色) - 图6

支持闪烁

  1. fmt.Println(Blink("Blink"))

限制

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

  1. r := Red("red")
  2. var i int
  3. fmt.Printf("%T %p\n", r, Green(&i))
  1. aurora.value %!p(aurora.value={0xc42000a310 768 0})

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

  1. fmt.Println(Red(fmt.Sprintf("%T %p\n", r, Green(&i))))