网络编程
位置:首页>> 网络编程>> 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
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com