news 2026/5/1 22:46:49

Rust 格式化输出完全攻略:从入门到精通

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Rust 格式化输出完全攻略:从入门到精通

在 Rust 开发中,格式化输出是调试、日志打印、字符串构造的核心技能。Rust 提供了一套强大且灵活的输出宏体系,支持普通打印、调试输出、自定义格式、精度控制、对齐填充等几乎所有场景。

本文结合完整知识点,为你总结 Rust 中所有输出方式 + 格式化语法,通俗易懂、全是干货,看完就能直接用在项目里。


一、Rust 五大输出宏(必背)

Rust 提供 5 个核心输出宏,分工明确:

作用输出目标换行
print!格式化输出文本标准输出 (stdout)
println!格式化输出文本 + 自动换行标准输出
format!生成格式化字符串(不打印,返回 String)内存字符串
eprint!错误信息输出标准错误 (stderr)
eprintln!错误信息输出 + 自动换行标准错误

简单示例

fnmain(){// 打印不换行print!("Hello ");// 打印并换行println!("World!");// 生成格式化字符串(最常用!)lets=format!("{} + {}",1,2);println!("{s}");// 错误输出(用于日志、报错)eprintln!("错误:文件打开失败");}

二、两种核心占位符:{} 与 {:?}

Rust 抛弃了 C 语言的%d/%s,只用两种占位符搞定一切:

1.{}—— 面向用户的友好输出

  • 实现std::fmt::Display特征
  • 用于最终用户展示
  • 字符串、数字默认支持
  • 结构体不能直接用,需手动实现Display
println!("{}",123);println!("{}","hello");

2.{:?}—— 面向调试的输出

  • 实现std::fmt::Debug特征
  • 用于开发调试
  • 绝大多数类型可直接用(数组、Vec、枚举等)
  • 结构体只需#[derive(Debug)]
#[derive(Debug)]structUser{name:String}println!("{:?}",User{name:"Zhang".into()});

3.{:#?}—— 美化调试输出(自动换行 + 缩进)

println!("{:#?}",vec![1,2,3]);

输出结构清晰,适合复杂数据调试。


三、自定义类型如何输出?(高频面试 / 开发)

1. 调试用:给结构体加#[derive(Debug)]

最简单,90% 场景够用。

2. 展示用:手动实现Display特征

usestd::fmt;structPerson{name:String,age:u8}implfmt::DisplayforPerson{fnfmt(&self,f:&mutfmt::Formatter)->fmt::Result{write!(f,"姓名:{},年龄:{}",self.name,self.age)}}// 使用:{}println!("{}",Person{name:"张三".into(),age:18});

3. 外部类型无法直接实现 Display?用 Newtype 包装

structArray(Vec<i32>);implfmt::DisplayforArray{fnfmt(&self,f:&mutfmt::Formatter)->fmt::Result{write!(f,"数组:{:?}",self.0)}}

四、高级格式化语法(万能格式手册)

1. 位置参数

println!("{1} {0}","a","b");// 输出 b a

2. 具名参数

println!("{name}",name="张三");

3. Rust 1.58+ 直接捕获环境变量(超级好用)

letname="张三";println!("{name}");// 直接用变量名!

五、宽度、对齐、填充(格式化表格必备)

左对齐</ 右对齐>/ 居中^

println!("{:<5}","x");// 左对齐:x____println!("{:>5}","x");// 右对齐:____xprintln!("{:^5}","x");// 居中:__x__

指定填充字符

println!("{:-<5}","x");// x----

数字补 0

println!("{:05}",42);// 00042

六、精度控制

浮点数保留小数

println!("{:.2}",3.14159);// 3.14

字符串截取长度

println!("{:.3}","hello");// hel

七、进制输出(调试神器)

println!("{:#b}",27);// 二进制 0b11011println!("{:#o}",27);// 八进制 0o33println!("{:#x}",27);// 小写十六进制 0x1bprintln!("{:#X}",27);// 大写十六进制 0x1B

八、指针地址输出

letv=vec![1,2,3];println!("{:p}",v.as_ptr());// 输出内存地址

九、转义输出

想打印{}

println!("{{}}");// 输出 {}println!("\"Hello\"");// 输出 "Hello"

十、一张图记住 Rust 输出体系

标准输出:print! / println! 错误输出:eprint! / eprintln! 字符串生成:format! 占位符: {} = Display(用户展示) {:?} = Debug (调试) {:#?} = 美化调试 格式控制: 对齐:< > ^ 填充:0 或自定义符号 精度:.2 .4 进制:b o x X

总结(最核心 4 条)

  1. 日常打印用println!,构造字符串用format!
  2. 给用户看用{},调试用{:?}
  3. 复杂结构体必须加#[derive(Debug)]
  4. Rust 1.58+ 可直接println!("{var}")
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 22:45:47

QRazyBox:3步拯救无法扫描的二维码,让重要信息重见天日

QRazyBox&#xff1a;3步拯救无法扫描的二维码&#xff0c;让重要信息重见天日 【免费下载链接】qrazybox QR Code Analysis and Recovery Toolkit 项目地址: https://gitcode.com/gh_mirrors/qr/qrazybox 你是否曾经遇到过这样的尴尬时刻&#xff1f;一张重要的二维码因…

作者头像 李华
网站建设 2026/5/1 22:43:51

如何快速提升微信读书效率:完整笔记管理指南

如何快速提升微信读书效率&#xff1a;完整笔记管理指南 【免费下载链接】wereader 一个浏览器扩展&#xff1a;主要用于微信读书做笔记&#xff0c;对常使用 Markdown 做笔记的读者比较有帮助。 项目地址: https://gitcode.com/gh_mirrors/wer/wereader 还在为微信读书…

作者头像 李华
网站建设 2026/5/1 22:43:51

VGG-T3:线性复杂度的大规模3D重建技术解析

1. 项目概述&#xff1a;线性复杂度的大规模3D重建在计算机视觉领域&#xff0c;3D重建一直是个极具挑战性的任务。想象一下&#xff0c;你手头有几百张甚至上千张罗马斗兽场的游客照片&#xff0c;每张照片的拍摄角度、光照条件都不尽相同。传统方法需要耗费数小时甚至数天时间…

作者头像 李华