可能很多朋友搭完编程环境,就开始从数据类型、流程控制开始哐哐学。这样意义其实并不大,而我打算给大家一个 不一样的入门体验,就先从 颜色 开始吧。比如本篇以下面的效果为目标,一起学习吧 ~

image.png


1. 给你的打印着上色

你有没有发现,当我们用 println! 输出信息时,所有文字都是一个颜色,看起来单调乏味。但是你知道吗?其实我们可以让控制台输出变得多彩多姿!
现在你可以先把下面的代码运行一下,体验一下其他颜色的输出效果:

fn main() {
  println!("\x1b[31mHello, World!\x1b[0m");
}

运行后可以看到,控制台打印了红色的

image.png


2. 了解 ANSI 转义码基础

那么,这个“魔法”是怎么实现的呢?答案就是 ANSI 转义码。

你可以把 ANSI 转义码想象成一种“暗号”,就像我们在聊天时用的表情包一样。当终端看到这些特殊的字符序列时,就知道要改变文字的颜色或者样式了。

image.png

这句话是 Rust 语言中用于在终端输出红色文本的打印语句,核心是通过「ANSI 转义序列」控制文本颜色。
语句核心构成如下:

  • println! :Rust 标准库中的打印宏,用于将内容输出到终端并自动换行。
  • \x1b:表示 ASCII 中的「转义字符(ESC)」,是所有 ANSI 控制序列的起始标志(也可写作 \033)。
  • [31m:ANSI 颜色控制码,31 代表「前景色(文字颜色)为红色」,m 是控制码的结束符。
  • -> 红色:实际要显示的文本内容,会被前面的 [31m 染成红色。
  • \x1b[0m:ANSI 重置控制码,0 代表恢复终端默认样式(包括颜色、字体等),避免后续文本继续继承红色。

可便捷使用的有 0~7 一共 8 种颜色,3 开头表示文字颜色,如下所示。你可以通过代码把它们打印一下:

前景色(文字颜色)

颜色 标准 亮色 示例
黑色 30 90 \x1b[30m黑色\x1b[0m
红色 31 91 \x1b[31m红色\x1b[0m
绿色 32 92 \x1b[32m绿色\x1b[0m
黄色 33 93 \x1b[33m黄色\x1b[0m
蓝色 34 94 \x1b[34m蓝色\x1b[0m
紫色 35 95 \x1b[35m紫色\x1b[0m
青色 36 96 \x1b[36m青色\x1b[0m
白色 37 97 \x1b[37m白色\x1b[0m

image.png

fn main() {
    println!("=== 8种基础颜色演示 ===");
    println!("\x1b[30m黑色0\x1b[0m");
    println!("\x1b[31m红色1\x1b[0m");
    println!("\x1b[32m绿色2\x1b[0m");
    println!("\x1b[33m黄色3\x1b[0m");
    println!("\x1b[34m蓝色4\x1b[0m");
    println!("\x1b[35m紫色5\x1b[0m");
    println!("\x1b[36m青色6\x1b[0m");
    println!("\x1b[37m白色7\x1b[0m");
}

3. 使用背景色

如果你想为文字背景着色,可以使用 4 开头的 8 个颜色,效果如下:

image.png

fn main() {
    println!("=== 8种基础颜色背景演示 ===");
    println!("\x1b[40m黑色0\x1b[0m");
    println!("\x1b[41m红色1\x1b[0m");
    println!("\x1b[42m绿色2\x1b[0m");
    println!("\x1b[43m黄色3\x1b[0m");
    println!("\x1b[44m蓝色4\x1b[0m");
    println!("\x1b[45m紫色5\x1b[0m");
    println!("\x1b[46m青色6\x1b[0m");
    println!("\x1b[47m白色7\x1b[0m");
}

4. 使用 24 位真彩色

现在来到最精彩的部分了!传统的 8 种颜色还不够用?那我们来玩点更高级的——RGB 真彩色!
这就像是从蜡笔升级到了数位绘画板,3 个 8 位 的 int 值,可以提供 1600 万种颜色可以选择!格式是:\x1b[38;2;r;g;b;m

image.png

fn main() {
    println!("=== RGB 色值 ===");
    println!("\x1b[38;2;255;0;0m纯红色\x1b[0m");
    println!("\x1b[38;2;0;255;0m纯绿色\x1b[0m");
    println!("\x1b[38;2;255;255;0m纯黄色\x1b[0m");
    println!("\x1b[38;2;253;156;39m橙色\x1b[0m");
}

到这里,文章开始的小目标就非常容易了,只要对每个字符,使用不同的 rgb 颜色输出即可:

image.png

pub fn main() {
    println!("欢迎来到张风捷特烈的 Rust 之旅 - 硬编码版本:");
    print!("\x1b[38;2;255;0;0m欢");      // 红色
    print!("\x1b[38;2;255;64;0m迎");     // 橙红色
    print!("\x1b[38;2;255;128;0m来");    // 橙色
    print!("\x1b[38;2;255;191;0m到");    // 橙黄色
    print!("\x1b[38;2;255;255;0m张");    // 黄色
    print!("\x1b[38;2;191;255;0m风");    // 黄绿色
    print!("\x1b[38;2;128;255;0m捷");    // 浅绿色
    print!("\x1b[38;2;64;255;0m特");     // 绿色
    print!("\x1b[38;2;0;255;0m烈");      // 纯绿色
    print!("\x1b[38;2;0;255;64m的");     // 绿青色
    print!("\x1b[38;2;0;255;128m ");      // 浅青色
    print!("\x1b[38;2;0;255;191mR");      // 青色
    print!("\x1b[38;2;0;255;255mu");      // 青蓝色
    print!("\x1b[38;2;0;191;255ms");      // 浅蓝色
    print!("\x1b[38;2;0;128;255mt");      // 蓝色
    print!("\x1b[38;2;0;64;255m ");       // 深蓝色
    print!("\x1b[38;2;0;0;255m之");      // 纯蓝色
    print!("\x1b[38;2;64;0;255m旅");     // 蓝紫色
    println!("\x1b[0m");
}

小结:

本篇主要介绍了一下控制台打印输出时色彩的使用:

image.png

到这里,其实我们并没接触到任何 rust 的语法。但是能在控制台看到我们熟悉的颜色,以及 rgb 这位老朋友能在这个异国他乡,发挥作用。会不会有种莫名的小激动呢?
接下来,就让颜色伴随我们,一起开启这段 rust 学习的奇妙之旅。
酷色篇 启动 ~

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐