背景介绍

今天跟大家推荐一款可以给终端输出上色的工具--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

https://github.com/pingyeaa/golang-examples

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

Go语言库系列之aurora的更多相关文章

  1. Go语言库系列之email

    导读 大家好我是平也,今天跟大家介绍一款用来发送邮件的Go语言库email,目前星星1.3k,非常好用. 极速上手 准备工作 初始化项目 go get github.com/jordan-wright ...

  2. Go语言库系列之flag

    背景 终端(命令行)操作是程序员的必备技能,但是你知道怎么通过golang制作出如下命令吗? $ flag girl -h Usage of girl: -height int 身高 (default ...

  3. Go语言库系列之dotsql

    导读:能单独拎出SQL文件的某一行或几行执行,是不是非常有趣?今天我们来介绍一下这个有意思的库--dotsql. 背景介绍 dotsql不是ORM,也不是SQL查询语句的构建器,而是可以在一个SQL文 ...

  4. ElasticSearch 2 (21) - 语言处理系列之单词识别

    ElasticSearch 2 (21) - 语言处理系列之单词识别 摘要 一个英语单词相对容易识别:因为英语单词是被空格或(某些)标点符号隔开的.但在英语中也有反例:you're 这个词是一个单词还 ...

  5. ElasticSearch 2 (20) - 语言处理系列之如何开始

    ElasticSearch 2 (20) - 语言处理系列之如何开始 摘要 Elasticsearch 配备了一组语言分析器,为世界上大多数常见的语言提供良好的现成基础支持. 阿拉伯语.亚美尼亚语,巴 ...

  6. 【Go语言入门系列】Go语言工作目录介绍及命令工具的使用

    [Go语言入门系列]前面的文章: [保姆级教程]手把手教你进行Go语言环境安装及相关VSCode配置 [Go语言入门系列](八)Go语言是不是面向对象语言? [Go语言入门系列](九)写这些就是为了搞 ...

  7. Linux C C语言库的创建和调用

    C语言库的创建和调用 简介: 假如,你有一个庞大的工程,代码量达到数百兆甚至是数G,你经常会遇到好多重复或常用的地方.每次使用到这些地方时如果都重新写一份基本相同的代码,这当然可以,不过这样会大大地降 ...

  8. R语言数据分析系列六

    R语言数据分析系列六 -- by comaple.zhang 上一节讲了R语言作图,本节来讲讲当你拿到一个数据集的时候怎样下手分析,数据分析的第一步.探索性数据分析. 统计量,即统计学里面关注的数据集 ...

  9. [iOS]C语言知识点系列视频

    C语言知识点系列视频 目录 C语言技术视频-01-变量的定义 C语言技术视频-02-程序分支结构(if...else) C语言技术视频-03-程序分支结构(switch) C语言技术视频-04-程序循 ...

随机推荐

  1. Java并发编程(01):线程的创建方式,状态周期管理

    本文源码:GitHub·点这里 || GitEE·点这里 一.并发编程简介 1.基础概念 程序 与计算机系统操作有关的计算机程序.规程.规则,以及可能有的文件.文档及数据. 进程 进程是计算机中的程序 ...

  2. Lambda表达式(JDK8)

    在说Lambda表达式之前,先介绍一下函数式接口 函数式接口 就是只定义了一个抽象方法的接口,我们可以使用注解@Functionallnterface,来强约束这种接口为函数式接口.如Runnable ...

  3. JZOJ 3505. 【NOIP2013模拟11.4A组】积木(brick)

    3505. [NOIP2013模拟11.4A组]积木(brick) (File IO): input:brick.in output:brick.out Time Limits: 1000 ms Me ...

  4. webpack进阶(三)

    1)CommonsChunkPlugin已经从webpack4移除,所以在用webpack进行公共模块的拆分时,会报错 Cannot read property 'CommonsChunkPlugin ...

  5. 开源项目在闲鱼、b 站上被倒卖?这是什么骚操作?

    起因 - 又是一封邮件 2020 年 3 月 2 日,收到了一封邮件,对,这次故事的起因又是一封邮件,和上次写个bug被国家信息安全漏洞共享平台抓到了一样. 这是一条评论通知邮件,一开始我以为只是正常 ...

  6. redis作为消息队列的原理

    Redis队列功能介绍 List 转:https://blog.csdn.net/cestlavieqiang/article/details/84197736 常用命令: Blpop删除,并获得该列 ...

  7. numpy——>数组拼接np.concatenate

    语法:np.concatenate((a1, a2, ...), axis=0) 1.默认是 axis = 0,也就是说对0轴(行方向)的数组对象,进行其垂直方向(axis=1)的拼接(即数据整行整行 ...

  8. 通过极简模拟框架让你了解ASP.NET Core MVC框架的设计与实现[上篇]

    <200行代码,7个对象--让你了解ASP.NET Core框架的本质>让很多读者对ASP.NET Core管道有了真实的了解.在过去很长一段时间中,有很多人私信给我:能否按照相同的方式分 ...

  9. File的功能--> 获取功能-->所有的根目录 | 创建文件功能,但是如果文件已经存在-->不再创建(新手)

    //导入的包.import java.io.File;import java.io.FileFilter;import java.io.IOException; // 获取功能-->所有的根目录 ...

  10. 关于 RuntimeBinderException 异常

    Microsoft.CSharp.RuntimeBinder.RuntimeBinderException的异常一般来自于两种: 第一种情况: Predefined type 'Microsoft.C ...