ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Rust 所有权与生命周期从入门到实战:先划清数据、调用与失败边界

2026/8/11 19:15:47 拓冰建站 浏览量
Rust 所有权与生命周期从入门到实战:先划清数据、调用与失败边界

Rust 所有权与生命周期从入门到实战:先划清数据、调用与失败边界

我以前重构时喜欢先把边缘函数拆得很漂亮,最后才发现核心数据到底归谁还没想清楚,生命周期标注又得重来。现在我会先画出数据从哪里创建、谁可以修改、谁只是读取,再动手拆模块。

一个实用的起点是:状态由顶层创建并拥有,业务函数尽量接收借用的数据,只在确实需要共享所有权时用Arc。这不是唯一结构,但能让我在小项目里少绕一些弯路。

graph TD Owner[入口创建状态] --> Api[定义读取和修改接口] Api --> Worker[无状态处理函数] Worker --> Result[返回结果,不持有状态]
use std::sync::Arc; struct AppState { cache_capacity: usize, } fn format_event(state: &AppState, event: &str) -> String { format!("event={event}, cache_capacity={}", state.cache_capacity) } fn main() { let state = Arc::new(AppState { cache_capacity: 256 }); let message = format_event(&state, "example"); println!("{message}"); }

这里的示例故意没有数据库地址、真实事件或运行环境配置。写笔记时,用占位数据足够说明所有权关系,也能避免把连接信息和业务数据带进代码片段。

拆分后我会问自己三件事:状态是否真的需要共享可变性;函数能否只拿&T;错误和输入数据是否还能在边界处被校验。答案不清楚时,先不急着抽象。