网络编程
位置:首页>> 网络编程>> Go语言>> 如何让shell终端和goland控制台输出彩色的文字

如何让shell终端和goland控制台输出彩色的文字

作者:Elonjelinek  发布时间:2023-07-13 03:24:56 

标签:goland,控制台,输出,彩色

终端输出彩色文字

开发工具:Mac,Goland,Mac自带shell。这是基于Mac的测试结果,根据读者留言,在Windows上不生效,标识符不一样。

在终端输出这段命令,将的到一个红色背景、绿色文字,并不停闪烁的输出。


sszxr:~ sszxr$ echo  -e "\033[5;32;41mI ♡  You \033[0m"
I ♡  You
sszxr:~ sszxr$

双引号中的反斜杠\表示转义,033是标识符,表示用来设置颜色,[表示开始颜色设置,m为颜色设置结束。[后面的5表示闪烁,分号后面的32表示前景色,也就是文字的颜色,为绿色;再后面41表示背景色,为红色,到m为设置结束,后面是输出的内容,最后为再一次设置颜色,0m表示取消颜色设置。

从括号[到m中间为颜色设置,以;号分隔。

样式有【0,1,4,5,7,8】六种,分别是:


0  终端默认设置
1  高亮显示
4  使用下划线
5  闪烁
7  反白显示
8  不可见

颜色有7中,分别为


前景 背景 颜色
30  40  黑色
31  41  红色
32  42  绿色
33  43  黄色
34  44  蓝色
35  45  紫红色
36  46  青蓝色
37  47  白色

3开头是前景色,也就是文字的颜色;4开头是背景色。

Go语言中的彩色输出

样式和颜色与上面一样,只是标识符不一样,


fmt.Printf("%c[0;41;36m%s%c[0m\n", 0x1B, "testPrintColor", 0x1B)

标识符为0x1B,具体设置也是在[到m之间,以分号;分隔。

另一种方式


package main
import (
"fmt"
)
var (
greenBg      = string([]byte{27, 91, 57, 55, 59, 52, 50, 109})
whiteBg      = string([]byte{27, 91, 57, 48, 59, 52, 55, 109})
yellowBg     = string([]byte{27, 91, 57, 48, 59, 52, 51, 109})
redBg        = string([]byte{27, 91, 57, 55, 59, 52, 49, 109})
blueBg       = string([]byte{27, 91, 57, 55, 59, 52, 52, 109})
magentaBg    = string([]byte{27, 91, 57, 55, 59, 52, 53, 109})
cyanBg       = string([]byte{27, 91, 57, 55, 59, 52, 54, 109})
green        = string([]byte{27, 91, 51, 50, 109})
white        = string([]byte{27, 91, 51, 55, 109})
yellow       = string([]byte{27, 91, 51, 51, 109})
red          = string([]byte{27, 91, 51, 49, 109})
blue         = string([]byte{27, 91, 51, 52, 109})
magenta      = string([]byte{27, 91, 51, 53, 109})
cyan         = string([]byte{27, 91, 51, 54, 109})
reset        = string([]byte{27, 91, 48, 109})
disableColor = false
)
func main() {
str := "hello world"
fmt.Println(greenBg, str, reset)
fmt.Println(whiteBg, str, reset)
fmt.Println(yellowBg, str, reset)
fmt.Println(redBg, str, reset)
fmt.Println(blueBg, str, reset)
fmt.Println(magentaBg, str, reset)
fmt.Println(cyanBg, str, reset)
word := "I love you"
fmt.Println(green, word, reset)
fmt.Println(white, word, reset)
fmt.Println(yellow, word, reset)
fmt.Println(red, word, reset)
fmt.Println(blue, word, reset)
fmt.Println(magenta, word, reset)
fmt.Println(cyan, word, reset)
}

运行结果

如何让shell终端和goland控制台输出彩色的文字

[]byte{}中那些数字是什么意思

他们是0x1B [ ; m以及0-9的ASCII编码


package main
import "fmt"
func main() {
fmt.Print(0x1B, '[', ';', 'm', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', "\n")
fmt.Printf("%#X\t%c\t%c\t%c\t", 27, 91, 59, 109)
fmt.Printf("%c\t%c\t%c\t%c\t%c\t%c\t%c\t%c\t%c\t%c\t", 48, 49, 50, 51, 52, 53, 54, 55, 56, 57)
}

运行结果

27 91 59 109 48 49 50 51 52 53 54 55 56 57

0X1B [ ; m 0 1 2 3 4 5 6 7 8 9

27代表0x1B

91代表[

59代表;

109代表m

57代表9,表示设置字体颜色

52代表4,表示设置背景色

51代表3,表示设置前景色,也就是文字的颜色

90到97与30到37的效果一样,一个是设置字体颜色,一个是设置前景色,所以57和51可以互换,效果完全一样,

reset表示0x1B[0m,表示清除颜色设置。


package main
import (
"fmt"
)
var (
black        = string([]byte{27, 91, 57, 48, 109})
red          = string([]byte{27, 91, 57, 49, 109})
green        = string([]byte{27, 91, 57, 50, 109})
yellow       = string([]byte{27, 91, 57, 51, 109})
blue         = string([]byte{27, 91, 57, 52, 109})
magenta      = string([]byte{27, 91, 57, 53, 109})
cyan         = string([]byte{27, 91, 57, 54, 109})
white        = string([]byte{27, 91, 57, 55, 59, 52, 48, 109})
reset        = string([]byte{27, 91, 48, 109})
disableColor = false
)
func main() {
word := "I love you"
fmt.Println(black, word, reset)
fmt.Println(red, word, reset)
fmt.Println(green, word, reset)
fmt.Println(yellow, word, reset)
fmt.Println(blue, word, reset)
fmt.Println(magenta, word, reset)
fmt.Println(cyan, word, reset)
fmt.Println(white, word, reset)
}

如何让shell终端和goland控制台输出彩色的文字

补充:Golang终端彩色输出

终端彩色输出


func main() {
fmt.Printf("\x1b[%dmhello world 30: 黑 \x1b[0m\n", 30)
fmt.Printf("\x1b[%dmhello world 31: 红 \x1b[0m\n", 31)
fmt.Printf("\x1b[%dmhello world 32: 绿 \x1b[0m\n", 32)
fmt.Printf("\x1b[%dmhello world 33: 黄 \x1b[0m\n", 33)
fmt.Printf("\x1b[%dmhello world 34: 蓝 \x1b[0m\n", 34)
fmt.Printf("\x1b[%dmhello world 35: 紫 \x1b[0m\n", 35)
fmt.Printf("\x1b[%dmhello world 36: 深绿 \x1b[0m\n", 36)
fmt.Printf("\x1b[%dmhello world 37: 白色 \x1b[0m\n", 37)
fmt.Printf("\x1b[%d;%dmhello world \x1b[0m 47: 白色 30: 黑 \n", 47, 30)
fmt.Printf("\x1b[%d;%dmhello world \x1b[0m 46: 深绿 31: 红 \n", 46, 31)
fmt.Printf("\x1b[%d;%dmhello world \x1b[0m 45: 紫   32: 绿 \n", 45, 32)
fmt.Printf("\x1b[%d;%dmhello world \x1b[0m 44: 蓝   33: 黄 \n", 44, 33)
fmt.Printf("\x1b[%d;%dmhello world \x1b[0m 43: 黄   34: 蓝 \n", 43, 34)
fmt.Printf("\x1b[%d;%dmhello world \x1b[0m 42: 绿   35: 紫 \n", 42, 35)
fmt.Printf("\x1b[%d;%dmhello world \x1b[0m 41: 红   36: 深绿 \n", 41, 36)
fmt.Printf("\x1b[%d;%dmhello world \x1b[0m 40: 黑   37: 白色 \n", 40, 37)
}

终端显示

如何让shell终端和goland控制台输出彩色的文字

取值范围


前景 背景 颜色
30 40 黑色
31 41 红色
32 42 绿色
33 43 黄色
34 44 蓝色
35 45 紫色
36 46 深绿
37 47 白色

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚

来源:https://blog.csdn.net/Charliewolf/article/details/84771983

0
投稿

猜你喜欢

  • 今天看看那些知名的Logo,可能你没注意过,它们也是一直在变化,有的还挺雷人的!先从时尚的苹果开始吧,苹果也有土的时候。1976年那第一个L
  • 什么是死锁,在Go的协程里面死锁通常就是永久阻塞了,你拿着我的东西,要我先给你然后再给我,我拿着你的东西又让你先给我,不然就不给你。我俩都这
  • 介绍:细处着手,巧处用功。高手和菜鸟之间的差别就是:高手什么都知道,菜鸟知道一些。电脑小技巧收集最新奇招高招,让你轻松踏上高手之路。 摘 要
  • 终于能出来透口气,写点东西了。前段太忙,也很郁闷,现在调整过来点了。我的设计原则就是在满足需求的前提下,尽可能的简化,简化,再简化。有一次跟
  • 今天同学向我提了一个问题,我觉得蛮有意思,现记录下来大家探讨下。问题是:在一个表里面,有一个允许为空的字段,空是可以重复的,但是不为空的值需
  • 1、IIS为一个死循的执行过程设定执行时间(缺省为90秒)超时事件:<%response.buffer=true%><BO
  •                XmlDocume
  • 当然有其它工具可以做这件事,但如果客户不允许你在服务器乱装东西时这个脚本就会有用了。 代码如下:DECLARE @tbImportTable
  • 把这两个很普遍性的网友比较关心的问题总结回答一下。in和exist的区别从sql编程角度来说,in直观,exists不直观多一个select
  • ASCII码键盘ASCII 码键盘ASCII 码键盘ASCII 码键盘27ESC32SPACE33!34"35#36$37%38&
  • 1069错误(由于登录失败而无法启动服务)解决方法在本版面出现这个问题的频率也算是很高的了,新手通常会比较多遇到这个问题原因很简单,安装SQ
  • js关于 byval 与 byref 二者区别: byval 传递数值,实参和形参分处不同的内存单元,互不干扰! byref 传递地址,实参
  • 本书的作者Douglas Crockford是JavaScript开发社区最知名的权威,JavaScript的发明人Brendan Eich
  • 1、XML 是什么?XML仅仅是一种数据存放格式,这种格式是一种文本(虽然XML规范中也提供了存放二进制数据的解决方案)。事实上有很多文本格
  • 在大型商业应用中,数据的异地容灾备份十分重要,也必不可少。笔者根据自己的实践经验,设计了一套简洁地实现异地数据自动备份的方法,可供数据库管理
  • 这段时间服务器崩溃2次,一直没有找到原因,今天看到论坛发出的错误信息邮件,想起可能是MySQL的默认连接数引起的问题,一查果然,老天,默认
  • 在日常的工作中,保护数据免受未授权用户的侵犯是系统管理员特别关心的问题。如果你目前用的是MySQL,就可以使用一些方便的功能来保护系统,来大
  • 概述 -------------------------------------------------------------------
  • 前言Go的错误处理这块是日常被大家吐槽较多的地方,我在工作中也观察到一些现象,比较严重的是在各层级的逻辑代码中对错误的处理有些重复。比如,有
  • 按照惯例,年底的淘宝的确是到了“需要改版的时候”。这次新版的淘宝首页上线,乍看并没有多少夺人眼球的地方,但仔细揣摩其中的细节,还是发现了不少
手机版 网络编程 asp之家 www.aspxhome.com