Rust 所有权与生命周期从入门到实战:上线前补齐校验、观测与回退

Rust 所有权与生命周期从入门到实战:上线前补齐校验、观测与回退

我写练习原型时也会用 unwrap(),方便先看主流程。但它不是“原型允许、正式代码禁止”这么简单:有些场景在证明不变量后可以使用,有些公共入口则必须把失败交给调用方处理。重点是知道边界在哪里,并用测试把它守住。

把一个小原型整理成可用功能时,我通常先做三件事:写清输入是否可空、把错误信息放进返回值、再看 clone 是不是真的需要。性能优化放在能测到瓶颈之后,不为了避开借用检查器先堆一层 clone。

use anyhow::{Context, Result};

fn normalize_name(input: Option<&str>) -> Result<String> {
    let input = input.context("名称不能为空")?;
    let input = input.trim();
    if input.is_empty() {
        anyhow::bail!("名称不能为空白");
    }
    if input.len() > 128 {
        anyhow::bail!("名称过长");
    }
    Ok(input.to_uppercase())
}

#[test]
fn rejects_empty_name() {
    assert!(normalize_name(Some(" ")).is_err());
}

我自己的验收清单

  • 公共函数的失败路径是否能被调用方理解和处理。
  • clone() 是否有数据所有权上的理由,而不是为了让编译器安静下来。
  • 边界输入和错误分支是否有测试。
  • 公开错误信息里不包含路径、账号、令牌或业务内容。

这些检查不保证代码没有问题,但能让我在把练习代码继续扩展前,先看见比较明显的坑。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值