首页 > 其他分享 >Go每日一库之151:aurora(终端输出上色)

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

时间:2023-10-01 09:01:07浏览次数:41  
标签:151 Gray 输出 fmt BgGray 一库 Println Go aurora

背景介绍

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

标签:151,Gray,输出,fmt,BgGray,一库,Println,Go,aurora
From: https://www.cnblogs.com/arena/p/17738567.html

相关文章

  • Go每日一库之149:PDF处理相关库
    PDF处理场景:pdf渲染pdf校验pdf加水印pdf获取页数pdf合并pdf拆分修复受损pdfpdf转png识别pdf中的字体pdf解密...一、HTML页面渲染PDF根据html页面渲染pdf,我使用过以下两种方案:wkhtmltopdfchromedp1.使用wkhtmltopdf渲染pdfwkhtmltopdf是一个命令行工具,用......
  • Go每日一库之148:base64Captcha(多种形式验证码)
    Base64captcha几行代码就可以定义自己内容的图形验证码库,支持任意unicode字符的内容.1.文档&DemoEnglish中文文档Playground2.快速上手2.1下载base64Captcha包goget-ugithub.com/mojocn/base64Captcha2.2在您的项目中使用base64Captcha2.2.1实现Store......
  • 更改Mantis的logo
    1准备好自己的logo,例如准备的logo为zhaoxiyu.gif、zxy.gif 2把上面的两个logo存放到C:/mantis-1.0.0a3/images 3打开C:/mantis-1.0.0a3/core中的html_api.php文件 4查找functionhtml_top_banner()在这个函数中更改echo'<ahref="http://www.Browan.com"title="Hello B......
  • 执行 go mod tidy 后卡住的解决方案
    内容来自对chatgpt的咨询原因gomodtidy卡住可能有以下几个原因:网络问题:gomodtidy时需要从网络下载依赖,如果网络不稳定或者因为某些原因访问某些资源地址很慢,可能导致此命令延迟或者卡住。可以尝试使用Go的官方代理或其他信赖的代理,例如设置环境变量exportGOPROXY=htt......
  • golang 代码实现一个工具函数:用于合并两个go map
    内容来自对chatgpt的咨询初始化一个新map,然后遍历两个旧map,把每个元素都存到新map即可。packagemainimport"fmt"//MergeMaps创建一个新的map用于保存合并后的值。返回新的map。funcMergeMaps(destMap,sourceMapmap[string]interface{})map[string]inter......
  • golang 代码实现:并发请求下游接口,下游接口限制请求参数中某数组单次最多传20个
    内容来自对chatgpt的咨询假设你有一个golang的数组,数组元素数量大于20,你需要调用下游接口,但是接口的请求参数限制了一次最多传20个,为了节省时间,你需要并发调用,完整整个数组的下游调用,请完成代码编写写法一我们将数组切分成最大20个元素的小块,并对每个块并发调用下游接口:p......
  • golang 代码实现如果在在一个秒级时间戳上加上23h59m59s
    代码来自chatgpt实现如果在在一个秒级时间戳上加上23h59m59s先把时间戳转换成time对象,然后利用Add函数在该对象上添加23h59m59s,最后获取时间对象的时间戳packagemainimport( "fmt" "time")funcmain(){ //Supposeyouhaveatimestampinseconds timestam......
  • golang grom 实现 INSERT...ON DUPLICATE KEY UPDATE
    内容来自对chatgpt的咨询前言(INSERT...ONDUPLICATEKEYUPDATE介绍)当你在MySQL中插入数据,如果唯一键发生冲突,可以使用INSERT...ONDUPLICATEKEYUPDATE语句实现插入和更新操作。其基本语法如下:INSERTINTOtable(col1,col2,...colN)VALUES(value1,value2,...va......
  • Django 设置静态文件路径
    #settings.pySTATIC_URL='/static/'#添加静态文件夹路径STATICFILES_DIRS=(os.path.join(BASE_DIR,'static'),) 可以直接访问即可:http://localhost:1000/static/css/element.css 不需要在urlsetting里做任何配置了.......
  • Win12不会取代Win11!真正目标是Google
    Windows11之后自然应该是Windows12,但这一次不太一样。据多个消息源确认,Windows的下一个重大版本将不会是Windows11的直接升级版,而是更专注于云和Web,同时大力接入AI,目标直指GoogleChromeOS。这个所谓的Windows12,将打造一个更加现代化、模块化、轻量化的系统,尤其适合低端教育......