Rust 所有权与生命周期从入门到实战:上线前补齐校验、观测与回退
Rust 所有权与生命周期从入门到实战上线前补齐校验、观测与回退我写练习原型时也会用unwrap()方便先看主流程。但它不是“原型允许、正式代码禁止”这么简单有些场景在证明不变量后可以使用有些公共入口则必须把失败交给调用方处理。重点是知道边界在哪里并用测试把它守住。把一个小原型整理成可用功能时我通常先做三件事写清输入是否可空、把错误信息放进返回值、再看 clone 是不是真的需要。性能优化放在能测到瓶颈之后不为了避开借用检查器先堆一层 clone。use anyhow::{Context, Result}; fn normalize_name(input: Optionstr) - ResultString { 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()是否有数据所有权上的理由而不是为了让编译器安静下来。边界输入和错误分支是否有测试。公开错误信息里不包含路径、账号、令牌或业务内容。这些检查不保证代码没有问题但能让我在把练习代码继续扩展前先看见比较明显的坑。

相关新闻