Rust 速查 — 简明参考
Rust 2021 版语法、所有权、错误处理与最常用 std API 速查手册,覆盖约 80% 日常场景。
Rust Rust 2021 edition
rustc / cargo · 编译型 · 系统级 · 函数式 · 并发 · 静态 · 强类型 · affine(移动语义)
学习路径
先学会 cargo new/run 与 println! → 掌握变量绑定、所有权与借用(Rust 核心)→ 深入 match、函数与闭包 → 用 Vec/HashMap/迭代器组织数据 → 理解 trait 与泛型 → 用 Result 与 ? 处理错误 → 用线程与 channel 写并发 → 再按需学网络、时间与构建测试。FAQ 节适合回头避坑。
1.Hello World 与构建环境
运行 Rust 程序、cargo 项目与工具链。
最小程序
fn main 是入口。println! 宏输出。语句以分号结尾。
运行与构建
cargo run 编译并运行、cargo build 生成二进制、cargo check 快速检查。
cargo 项目
cargo new 初始化项目。Cargo.toml 声明包与依赖。src/ 放源码。
edition
edition 声明语言版本。2021 是当前版本。rust-version 声明最低工具链。
输出宏
println!/print! 输出、eprintln! 错误流、format! 生成字符串。
命令行参数
std::env::args 获取命令行参数。第一个是程序路径。
多文件
mod 声明模块。子模块文件或目录。use 导入。
直接编译
rustc 编译单个文件。无 cargo 依赖。适合练习与小脚本。
2.变量与绑定
let 绑定、可变性、遮蔽、作用域与类型。
let 与 mut
let 绑定变量默认不可变。mut 声明可变。Rust 变量默认不可变。
遮蔽
同名 let 遮蔽旧绑定。可改变类型。不同于 mut 修改。
const 与 static
const 编译期常量。static 静态变量。命名用全大写。
类型推断
编译器根据上下文推断类型。必要时显式标注。整数默认 i32。
解构绑定
let 支持模式解构。元组、结构体、数组一次性取出。
作用域
块作用域 {}。变量生命周期。内层可访问外层。
命名规范
Rust 命名约定。snake_case 变量/函数、CamelCase 类型。
类型转换
as 做显式数值转换。From/Into trait 做安全转换。
3.类型系统
基础类型、元组、结构体与枚举。
基础类型
整数、浮点、布尔、字符。标量类型与长度。
整数类型
i8-u128、usize/isize。有符号无符号。平台相关。
浮点数
f32/f64 符合 IEEE 754。NaN、无穷、运算。
char 类型
char 是 Unicode 标量值,占 4 字节。单引号字面量。
元组
固定长度异构集合。索引访问。解构。空元组是 ()。
结构体
struct 定义命名字段。实例化、访问、更新语法。
枚举
enum 定义多种变体。可携带数据。match 穷尽处理。
单元类型
() 表示没有值。函数默认返回 ()。无参无返回的约定。
4.所有权与引用
所有权、借用、引用与切片。Rust 内存安全核心。
所有权
每个值只有一个所有者。离开作用域自动释放。移动而非拷贝。
引用
&T 不可变引用,不转移所有权。借用后原值仍可用。
可变引用
&mut T 可变引用。同一作用域一个变量只能有一个可变引用。
解引用
* 运算符访问引用指向的值。解引用与引用配对。
生命周期
'a 标注引用有效范围。借用检查器保证引用有效。省略规则。
切片
&[T] 是连续元素的引用。字符串切片 &str。无所有权。
Deref 自动解引用
Deref trait 让 &String 自动变 &str 等。参数多态便捷。
Copy 类型
Copy trait 类型赋值是复制而非移动。整数、浮点、bool、char 等。
5.流程控制
if、match、循环。Rust 控制流是表达式。
if 表达式
if/else 是表达式,可返回值。条件无需括号。
match
match 穷尽匹配。每个分支是表达式。可匹配模式、范围、守卫。
while 循环
while 条件循环。条件为真时反复执行。
for 循环
for 遍历范围与迭代器。Rust 首选循环方式。
无限循环
loop 无限循环直到 break。可返回值。可带标签。
break 与 continue
break 退出循环。continue 跳过本轮。可配合标签。
if let
if let 简化单模式匹配。只关心一种变体时使用。
while let
while let 循环直到模式不再匹配。迭代处理集合。
6.函数
函数定义、返回值、所有权传递、闭包与泛型。
函数定义
fn 定义函数。参数需类型标注。函数体是表达式。
返回值
最后一个表达式是返回值。分号区分语句与表达式。
参数
参数默认不可变。模式解构参数。引用参数避免拷贝。
所有权参数
传值即转移所有权。借用可复用。需要时返回所有权。
借用参数
&T 只读借用、&mut T 可变借用。避免转移所有权。
闭包
闭包捕获环境变量。|参数| 语法。可存变量、传函数。
函数指针
fn 类型引用普通函数。fn(T) -> U 语法。闭包转 fn。
泛型函数
泛型参数 <T> 抽象类型。可加约束。类型推断。
7.字符串
&str 与 String、操作、格式化、解析与遍历。
&str 与 String
&str 是借用字符串,String 是拥有所有权的可增长字符串。
String 操作
追加、插入、替换、删除。修改 String 的方法。
格式化
format! 拼接字符串。占位符与格式控制。安全高效。
字符串切片
&s[a..b] 按字节切片。必须在字符边界,否则 panic。
字符串遍历
chars() 按字符、bytes() 按字节、char_indices 带位置。
字符串解析
str::parse 解析为数值。parse::<T>() 需标注目标类型。
字符操作
char 方法:大小写、数字判断、空白。字符串方法组合。
字符串方法
查询、修剪、分割、判断。常用 str 方法链式调用。
8.集合
Vec、HashMap、集合类型与迭代器。
Vec
Vec<T> 动态数组。可变长,可增删。栈上引用、堆上数据。
Vec 操作
迭代、过滤、映射、收集。切片视图与所有权。
HashMap
HashMap<K, V> 键值对。哈希实现,无序。查找 O(1)。
HashSet
HashSet<T> 唯一元素集合。去重、交集、并集、差集。
BTree
BTreeMap/BTreeSet 有序键。按序遍历。性能略逊哈希。
迭代器
Iterator trait 驱动链式操作。惰性求值。消费才执行。
VecDeque
VecDeque 双端队列。两端高效增删。环形缓冲。
嵌套集合
集合的组合。Vec<HashMap>、HashMap 嵌套、多维 Vec。
9.内存与所有权扩展
堆分配、智能指针与共享所有权。
栈与堆
栈上固定大小、快速。堆上动态大小、需分配。所有权管理生命周期。
Box
Box<T> 把值放堆上。大小确定、转移所有权。递归类型必需。
Rc
Rc<T> 引用计数共享所有权。单线程。多个所有者只读。
RefCell
RefCell<T> 运行时借用检查。内部可变性。借用冲突 panic。
Arc
Arc<T> 线程安全引用计数。多线程共享所有权。原子计数。
Mutex
Mutex<T> 互斥访问内部值。锁保护。与 Arc 组合共享可变。
原子类型
AtomicU32 等原子操作。无锁并发计数。Ordering 内存序。
智能指针
Deref/Drop trait。Box/Rc/Arc 实现。指针抽象与自动清理。
10.trait 与泛型
trait 抽象、实现、泛型约束与多态。
trait 定义
trait 定义共享行为。方法签名。类似接口。
实现 trait
impl Trait for Type 实现行为。孤儿规则:trait 或类型必须本地。
默认方法
trait 方法可提供默认实现。覆盖可选。调用顺序自动。
trait 对象
dyn Trait 动态分派。异构集合。运行时多态。
泛型
泛型类型与函数。T 抽象。代码复用。单态化零开销。
泛型约束
T: Trait 约束。where 从句。约束 trait 组合。
impl 块
impl 关联方法与关联函数。self、Self。构造函数约定。
组合与多态
Rust 无继承。用 trait + 组合复用。默认实现替代基类。
11.错误处理
Result、Option、? 运算符、panic 与自定义错误。
Result
Result<T, E> 返回成功值或错误。Ok/Err 变体。
unwrap 与 expect
unwrap 成功取值,失败 panic。expect 带自定义消息。调试用。
? 运算符
? 简化错误传播。Err 自动返回,Ok 解包继续。
实现 Error
标准 Error trait。Display + Debug 打印。错误链。
自定义错误
设计自己的错误类型。枚举变体携带上下文。错误分类。
thiserror
thiserror 派生宏自动实现 Display/Error。减少样板代码。
Option
Option<T> 处理可能缺失。Some/None。安全访问。
panic
panic! 不可恢复错误。程序崩溃并展开栈。仅用于bug。
12.输入输出
标准输入输出、文件读写与文件系统。
读取输入
stdin 读取一行。read_line 到 String。trim 去除换行。
读取文件
read_to_string 一次性读入。Read trait 流式读取。
写入文件
write/append 写入。OpenOptions 控制模式。缓冲写入。
文件系统
创建目录、删除、重命名、判断存在。路径操作。
BufRead 逐行
BufRead trait 逐行读取。lines()、read_line、split。
输出与写入
print!/println!/eprintln!。write!/writeln! 到任意写入者。
标准流
stdin/stdout/stderr 标准流。交互与管道数据。
字节读取
read 读字节到缓冲。流式处理二进制。write_all 写全部。
13.常见误区
Rust 新手最容易踩的坑与正确写法。
移动后使用
值被移动后不能使用。借用或 clone 保留所有权。
借用冲突
不可变借用与可变借用不能并存。作用域缩短借用。
悬垂引用
返回局部变量的引用会悬垂。返回拥有所有权或生命周期。
String 拼接
+ 拼接会移动左侧。重复拼接性能差。用 format! 或 push_str。
索引类型
索引与长度是 usize,不能直接是 i32。集合索引类型不匹配。
match 分支类型
match 所有分支返回类型必须一致。缺分支需 _ 通配。
闭包捕获
闭包自动按需借用或移动。同时借用冲突。move 显式转移。
整数溢出
调试构建溢出 panic。发布构建回绕。显式处理或选类型。
14.并发
线程、channel、共享状态与 Send/Sync。
线程
thread::spawn 启动新线程。join 等待完成。返回值可传递。
move 闭包
move 闭包把捕获值移入线程。避免借用悬垂。
channel
mpsc 多生产者单消费者。send/recv 传输数据。类型安全。
多生产者
Sender 克隆实现多生产者。共享一个接收端。
共享可变
Arc<Mutex<T>> 多线程共享可变数据。锁保护读写。
scoped 线程
thread::scope 借用非 'static 数据。无需 move 所有权。
rayon 并行
rayon 并行迭代器。par_iter 替代 iter。数据并行简单化。
Send 与 Sync
Send 可跨线程移动。Sync 可被引用共享。安全并发保障。
15.网络
TCP、UDP、HTTP 与第三方网络库。
TCP 连接
TcpStream 建立连接。read/write 收发数据。流式协议。
TCP 监听
TcpListener 绑定监听端口。accept 接受连接。多连接线程处理。
HTTP 请求
reqwest 发起 HTTP 请求。JSON 请求与响应。
HTTP 服务
axum 构建 HTTP 服务。路由与处理器。异步。
URL 处理
url crate 解析与构建 URL。查询参数。
IP 解析
std::net::IpAddr 解析 IP。判断 IPv4/IPv6。
UDP
UdpSocket 无连接数据报。send_to/recv_from。无需握手。
DNS 解析
ToSocketAddrs 解析域名。查地址列表。
16.时间与日期
SystemTime、Instant、Duration 与 chrono。
SystemTime
SystemTime 系统时钟。获取当前时间。与 UNIX 纪元比较。
Instant 计时
Instant 单调时钟测量耗时。不受系统时间调整影响。
Duration
Duration 时间段。秒/纳秒精度。算术与转换。
chrono 当前时间
chrono crate 处理日期时间。Utc/Local 时区。人类可读。
格式化输出
format 格式化日期。strftime 风格占位符。
解析字符串
DateTime::parse_from_str 解析。ISO 8601 解析。
时间运算
加减时间、计算间隔、时间范围判断。
时区处理
FixedOffset 固定时区。本地时区偏移。跨时区转换。
17.进程与环境
命令行参数、环境变量、子进程与路径。
参数与环境
std::env 读取参数与环境变量。args 与 var。
clap 参数解析
clap 解析命令行参数。子命令、选项、帮助。
std::process
退出码、Command 子进程、当前进程信息。
Command 子进程
Command 控制子进程。参数、环境、管道、输出捕获。
PathBuf
Path/PathBuf 路径操作。拼接、组件、规范化。跨平台。
工作目录
当前目录、切换目录、用户目录。路径相关操作。
目录遍历
read_dir 遍历目录。递归收集文件。过滤类型。
信号处理
ctrlc crate 捕获 Ctrl+C。优雅退出。清理资源。
18.正则表达式
regex crate 匹配、捕获、替换与分割。
编译正则
Regex::new 编译。r#... 原始字符串。编译昂贵需复用。
匹配判断
is_match 判断是否匹配。部分匹配。整串匹配需锚点。
捕获分组
捕获组提取子串。captures 返回分组。命名组。
全部匹配
find_iter 遍历所有匹配。captures_iter 全部带分组。
替换
replace 替换匹配。$1 引用分组。replace_all 全部替换。
分割
split 按正则分割字符串。splitn 限制数量。
常见模式
常用正则写法。邮箱、URL、手机号、IP。字符类。
标志与大小写
(?i) 忽略大小写等内联标志。RegexBuilder 配置。
19.构建与测试
cargo 构建、单元测试、lint 与发布配置。
cargo build
构建项目。调试/发布模式。产物位置。增量编译。
单元测试
#[test] 属性。cargo test 运行。断言宏。
文档测试
/// 文档注释可运行。cargo test 验证示例。集成测试。
依赖管理
Cargo.toml 声明依赖。版本语义。cargo update。
clippy 检查
cargo clippy 代码检查。发现潜在 bug 与风格问题。
代码格式化
cargo fmt 统一格式。rustfmt。团队一致风格。
发布配置
[profile.release] 优化配置。裁剪二进制、LTO。
文档生成
cargo doc 生成 API 文档。rustdoc 标记。发布前跑文档测试。
关于本速查
本页是 Rust 2021 版的自包含速查手册,覆盖语言核心与最常用 std API 在真实项目中约 80% 的常见用法。内容偏向现代惯用法:? 传播错误、match 穷尽匹配、用迭代器替代手写循环、严格区分 String 与 &str。权威参考见 Rust 官方 Book 与标准库文档。 19 个章节各自聚焦一个主题——从第一个程序到所有权、trait、并发与常见误区。每节拆成 8 个带示例的小节(每个 5–20 行),共约 150 个主题。代码片段刻意短小、自解释。 所有处理都在浏览器中完成——无上传、无追踪。本页是 GuruToolkit 免费开发者工具集的一部分;代码片段可自由使用,无任何担保。
版本 2.1.0