90% 的 Rust 新手都不知道的 3 个实用开发技巧

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 新手在学习的道路上越走越顺。

相关推荐
IT_陈寒10 小时前
SpringBoot自动配置的坑,这次真踩疼我了
前端·人工智能·后端
shengjk110 小时前
AI Engineering 五代演进史:Prompt、RAG、Agent 到 Graph 的架构革命
后端
子兮曰11 小时前
AI 浏览器 Agent 的安全困局:当自动化工具可以偷走你的登录态
前端·人工智能·后端
妙码生花11 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(四十八):菜单规则管理实现
前端·后端·ai编程
XuCoder11 小时前
Redis 持久化:RDB 与 AOF
后端
Conan在掘金11 小时前
鸿蒙 7.0 智能体框架 2.0:意图即服务根因——从 InsightIntentExecutor 到 HMAF 2.0 Skill 演进
后端
掘金者阿豪11 小时前
折腾电科金仓 Docker 部署的一晚上:角色登录失败、远程连接失败,这几个坑终于踩完了
后端
lichenyang45311 小时前
从图片创作到本地可复现的 AIGC 全栈闭环:AIGC Creative Studio 实践复盘
前端·后端
倒流时光三十年11 小时前
第三阶段 26 · highlight 高亮(返回命中片段)
后端·python·django
lpfasd12312 小时前
编程语言榜单变迁分析
开发语言·后端·scala