90% 的 Rust 新手都不知道的 3 个实用开发技巧
今天分享 3 个 90% 的 Rust 新手都不知道,但一旦用上就再也离不开的实用开发技巧,帮助你在学习 Rust 的道路上少走弯路。
dbg! 比 println! 更适合调试
很多新手开发者倾向于使用 println! 宏进行调试,但其实 Rust 提供了专门用于快速调试的输出宏 dbg!。
rust
fn main() {
let x = 42;
let y = 10;
println!("x = {}", x);
dbg!(x, y);
dbg!(x + y * 2);
}
// Output:
// x = 42
// [src/main.rs:6:5] x = 42
// [src/main.rs:6:5] y = 10
// [src/main.rs:7:5] x + y * 2 = 62
从上面的示例可以看到,使用 println! 宏调试的时候需要手动写格式化字符串,而使用 dbg! 宏,则会自动打印表达式和值,还带文件名和行号。
除此之外,dbg! 宏还会返回传入表达式的值,这使得它可以无缝插入到现有代码中,不影响程序逻辑。
rust
fn main() {
let x = 10;
let y = 20;
let sum = dbg!(x) + dbg!(y);
dbg!(sum);
let sum = dbg!(calculate(x, y));
dbg!(sum);
}
fn calculate(a: i32, b: i32) -> i32 {
a + b
}
// Output:
// [src/main.rs:5:15] x = 10
// [src/main.rs:5:25] y = 20
// [src/main.rs:6:5] sum = 30
// [src/main.rs:8:15] calculate(x, y) = 30
// [src/main.rs:9:5] sum = 30
dbg! 宏不止可以直接嵌入表达式中,还可以嵌入函数调用当中,而这些是 println! 宏完全做不到的。非常的好用,反正我现在调试基本就是用 dbg! 宏了。
使用 todo! 宏占位
todo! 绝对是 Rust 标准库中最被低估且最实用的宏之一。在项目开发的早期时,让我们能专注于思考核心逻辑,而不被细节实现以及编辑器的报错打断。
rust
fn calculate_tax(income: f64) -> f64 {
todo!()
}
fn main() {
let tax = calculate_tax(10000.0);
dbg!(tax);
}
在上面的示例中,我们使用 todo! 宏进行占位,但是暂不实现的函数细节。
todo! 本质上是一个会触发 panic 的宏,所以当执行到它的时候就会抛出 panic。不过,todo! 宏有其明确的语义:这段代码尚未实现,后续需要补充。
在实际使用时,我强烈建议携带上下文信息,如下所示:
rust
fn calculate_tax(income: f64) -> f64 {
todo!("执行步骤一 -> 步骤二 -> 步骤三")
}
同时它也支持式化字符串:
rust
fn calculate_tax(income: f64) -> f64 {
todo!("收入为:{},执行步骤一 -> 步骤二 -> 步骤三", income)
}
如果你使用的是 VSCode 编辑器,我强烈建议你装上 Todo Tree,这个插件可以检索到代码中的 todo! 宏,不过需要在其正则匹配的规则中添加上相应内容:
json
{
"todo-tree.regex.regex": "(//|#|<!--|;|/\\*|^|^[ \\t]*(-|\\d+.))\\s*($TAGS)|todo!",
}
实际效果如下所示:

使用 bacon 进行热更新
为了避免每次修改代码之后,都需要重新手动编译一次。在实际开发过程中,热更新方案是不可或缺的,而 Rust 生态中最常用的热更新方案是 bacon。
shell
cargo install --locked bacon
安装完成后,我们需要到项目根目录中初始化 bacon 配置文件。
shell
bacon --init
它会自动生成 bacon.toml 配置文件,我们需要在配置文件中配置任务。这次的示例中,我们会用到它默认提供的任务 run。
首先,执行 bacon 命令启动服务。

接下来,键入 Ctrl-j 打开任务列表,我们切换到 run 任务。

当在终端中看到相关的打印时,意味着我们切换到 run 任务了。

之后,我们每次修改代码并保存,bacon 都会监听并重新执行任务。

结语
以上就是今天分享的 3 个 Rust 实用技巧,这些技巧看似简单,但却能在日常开发中节省大量时间和精力。希望这篇文章能对你有所帮助,也祝愿每一位 Rust 新手在学习的道路上越走越顺。