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