每日见闻之Rust中的日志输出

1 基础占位符

arduino 复制代码
println!("Hello, {}!", "world");

输出Hello, world!

2 数字格式化

arduino 复制代码
println!("{:04}", 42);

输出0042

  • {:04} 指定宽度为 4,不足部分用 0 填充(常用于补全日期、时间等)。

3 Debug 格式化

rust 复制代码
#[derive(Debug)]
struct User {
    name: String,
    age: u8
}

fn main() {
    let  user =  User {
        name : String::from("123"),
        age : 10
    };
    println!("{:?}", user);
    println!("{:#?}", user);
}

{:#?} 输出

js 复制代码
User {
    name: "123",
    age: 10,
}

{:?} 输出

js 复制代码
User { name: "123", age: 10 }
  • {:?} 使用类型的 Debug 实现格式化(适用于元组、结构体等)。
  • {:#?} 是美化版的 Debug 输出,常用于复杂结构的多行显示。

4 命名参数

ini 复制代码
println!("{password} is {value}", password = "password",value=4);

输出 password is 4

5 变量插值

ini 复制代码
let world = "world";
let name = "milk";
println!("Hello {world}!,My name is {name}!");
  • 直接在 {} 中使用变量名(无需显式传递参数),类似 Python 的 f-string。

6 多参数与位置

arduino 复制代码
println!("My name is {} ,My Age is {}", "Milk", 18)

输出 My name is Milk ,My Age is 18

  • 多个 {} 按顺序对应后面的参数

7 浮点数控制位数

arduino 复制代码
println!("浮点数控制位数 : {:.2}",3.1415926)

输出3.24

  • {:.2}保留两位小数

8 输出对应的16进制

arduino 复制代码
println!("输出对应的16进制 : {:x}",255)

输出ff

9 输出对应的二进制

arduino 复制代码
println!("输出对应的16进制 : {:b}",8)

输出1000

10 显示索引

arduino 复制代码
println!("显示索引 : {1} {} {} {0}",10,20)

输出 显示索引 : 20 10 20 10

  • {}中指定下标的为显示索引,按索引从后面的参数中取,{1}取得就是第二个参数 20
  • {}中不指定下标的是普通占位符,按顺序取参数

11 格式化字符串中的宽度参数

arduino 复制代码
println!("Hello {:5}!", "x");  // 输出: "Hello x    !"
  • {:5} 表示将参数 x 格式化为宽度为 5 的字符串,不足部分用空格填充。
  • 最终输出中,x 右侧有 4 个空格(总宽度为 5)。
arduino 复制代码
println!("Hello {:1$}!", "x", 5);  // 输出: "Hello x    !"
  • {:1$} 中的 1$ 表示使用 ** 第二个参数(索引 1)** 作为宽度值,即 5。
  • 等价于 {:5},但宽度值从参数列表动态获取。
arduino 复制代码
println!("Hello {1:0$}!", 5, "x");  // 输出: "Hello x    !"
  • {1:0$} 中的 1 表示 ** 第二个参数(索引 1)** 是要格式化的值(即 "x")。
  • 0$ 表示使用 ** 第一个参数(索引 0)** 作为宽度值(即 5)。
  • 整体效果:将 "x" 格式化为宽度为 5 的字符串。

12 字符串对齐与填充的高级控制

12.1 左对齐

arduino 复制代码
println!("Hello {:<5}!", "x");

输出

复制代码
Hello x    !
  • {:<5} :显式指定左对齐 (<),宽度为 5。
  • 行为 :字符串 "x" 居左,右侧补 4 个空格(总宽度 5)。

12.2 自定义填充符

arduino 复制代码
println!("Hello {:-<5}!", "x")

输出

lua 复制代码
Hello x----!
  • {:-<5} :左对齐(<),用 - 填充剩余宽度。
  • 行为 :字符串 "x" 居左,右侧补 4 个 -。

12.3 居中对齐

arduino 复制代码
println!("Hello {:^5}!", "x")

输出

复制代码
Hello   x  !

12.4 右对齐

arduino 复制代码
println!("Hello {:>5}!", "x");

输出

复制代码
Hello     x!
相关推荐
Vex2une3 小时前
Google Picasa 精神续作:Rust 重写的离线本地相册工具‌
rust·图片管理·picasa·马良·本地照片管理·重复图片检测·maliang
unconditional1 天前
我拆了 sdkm 的自定义 SDK 机制:所谓“内置”,就是官方提前帮你填好的表
rust·开源
Ramble_Naylor2 天前
Rust深度解读:Send 与 Sync 的本质与线程安全边界
python·算法·rust
Ramble_Naylor2 天前
Rust深度解读:异步流(Async Streams)与生成器的处理艺术
开发语言·后端·rust
RobinDevNotes2 天前
Memvid 把 Agent 长期记忆塞进一个文件
人工智能·rust·openresty
miofly2 天前
GitHub 今日推荐|agent-desktop:通过无障碍树让 AI 代理直接操作桌面应用
rust·开源·github
geovindu2 天前
rust:N-Barrier Pattern
开发语言·后端·设计模式·rust·屏障模式·并发型模式
Ramble_Naylor3 天前
Rust深度解读:高性能 Web 网关与 Axum 架构剖析
前端·架构·rust
Hello.Reader3 天前
100 人同时操作一座三维城市,为什么不需要服务器渲染 6000 帧?Rust + wgpu 多端并发架构实战
服务器·架构·rust
遇码3 天前
2026-11-01-daw-retry-banner-body
人工智能·ai·rust·数据分析·大模型·agent