Rust 实战教学¶
前言¶
换了新部门后工作暂闲,便在刷算法之余重拾了 Rust。此前几度“从入门到放弃”,这次凭着“AI 在手,天下我有”的信心 😄 重读《Rust 程序设计语言》,居然越学越有兴趣,过完基础就一头扎进了实战项目。这份指南便是此番学习的记录,留作日后回看,也希望帮到同样在路上的你。
目录导航¶
| 篇 | 文件 | 项目 | 对应章节 |
|---|---|---|---|
| 基础语法 | 01_基础语法篇.md | 1. 猜数字、2. 计算器、3. 文件统计 | 第1-4章 |
| 结构体与集合 | 02_结构体与集合篇.md | 4. 待办、5. 通讯录、6. 表达式求值器 | 第5-6章 |
| 模块系统 | 03_模块系统篇.md | 7. 几何计算器 | 第7章 |
| 第三方 crate | 04_第三方crate篇.md | 8. HTTP客户端、9. 笔记管理器 | 第8章 |
| 错误处理 | 05_错误处理篇.md | 10. 银行账户管理器 | 第9章 |
| 泛型与 Trait | 06_泛型与Trait篇.md | 11. 形状库 | 第10章 |
| 测试 | 07_测试篇.md | 12. 字符串工具库 | 第11章 |
| 文件与命令行 | 08_文件与命令行篇.md | 13. 迷你 grep | 第12章 |
| 闭包与迭代器 | 09_闭包与迭代器篇.md | 14. 文本分析管道 | 第13章 |
| 智能指针 | 10_智能指针篇.md | 15. 双向链表 | 第15章 |
| 并发 | 11_并发篇.md | 16. 多线程下载器 | 第16章 |
| 面向对象 | 12_面向对象篇.md | 17. 博客文章状态机 | 第17章 |
| 网络与线程池 | 13_网络与线程池篇.md | 18. 多线程Web服务器 | 第20章 |
| 篇 | 文件 | 项目 | 对应章节 |
|---|---|---|---|
| 基础语法 | 01_基础语法篇.md | 1. 猜数字、2. 计算器、3. 文件统计 | 第1-4章 |
| 结构体与集合 | 02_结构体与集合篇.md | 4. 待办、5. 通讯录、6. 表达式求值器 | 第5-6章 |
| 模块系统 | 03_模块系统篇.md | 7. 几何计算器 📦 进阶:geometry 目录模块版(mod.rs、pub use 重导出、super/crate) |
第7章 |
| 第三方 crate | 04_第三方crate篇.md | 8. HTTP客户端、9. 笔记管理器、10. 待办持久化版(4的进阶)、11. 通讯录JSON版(5的进阶) 📦 进阶:notes JSON+标签版 |
第7-8章 |
| 错误处理 | 05_错误处理篇.md | 12. 银行账户管理器 | 第9章 |
| 泛型与 Trait | 06_泛型与Trait篇.md | 13. 形状库 📦 进阶:shapes 实战版(单方法 trait Area、海伦公式、纯库+测试) |
第10章 |
| 测试 | 07_测试篇.md | 14. 字符串工具库 📦 进阶:strtools(capitalize/camel_case、word_count 词频表语义) |
第11章 |
| 文件与命令行 | 08_文件与命令行篇.md | 15. 迷你 grep 📦 进阶:精简版 main(Result main vs Config/run 对比) |
第12章 |
| 闭包与迭代器 | 09_闭包与迭代器篇.md | 16. 文本分析管道 📦 进阶:text_analyzer 实战版(--min-len 标志解析、Option 化 API) |
第13章 |
| 智能指针 | 10_智能指针篇.md | 17. 双向链表 | 第15章 |
| 并发 | 11_并发篇.md | 18. 多线程下载器 | 第16章 |
| 面向对象 | 12_面向对象篇.md | 19. 博客文章状态机 | 第17章 |
| 网络与线程池 | 13_网络与线程池篇.md | 20. 多线程Web服务器 | 第20章 |
学习路线总览¶
| 阶段 | 项目 | 对应章节 | 核心知识点 |
|---|---|---|---|
| 基础语法 | 1. 猜数字游戏 | 第1-2章 | 变量、输入输出、loop、match、Ordering |
| 基础语法 | 2. 命令行计算器 | 第3章 | 函数、类型、模式匹配、命令行参数 |
| 所有权 | 3. 文件行数统计器 | 第4章 | 字符串、文件读取、迭代器 |
| 结构体 | 4. 待办事项管理器 | 第5章 | 结构体、Vec、方法、交互 |
| 枚举/集合 | 5. 联系人通讯录 | 第6章 | 枚举、HashMap、结构体 |
| 枚举进阶 | 6. 表达式求值器 | 第6章延伸 | 携带数据的枚举、递归下降解析、peekable |
| 模块系统 | 7. 几何计算器 | 第7章 | package/crate/module、lib 与 bin |
| 生态/crate | 8. 简单HTTP客户端 | 第8章 | 引入第三方 crate(reqwest) |
| 生态/crate | 9. 命令行笔记管理器 | 第8章 | 文件持久化、增删查 |
| 错误处理 | 10. 银行账户管理器 | 第9章 | Result、自定义错误、?、JSON |
| 泛型/特征 | 11. 形状库 | 第10章 | trait、泛型、生命周期 |
| 测试 | 12. 字符串工具库 | 第11章 | 单元测试、集成测试 |
| I/O | 13. 迷你 grep | 第12章 | 命令行解析、文件、环境变量 |
| 闭包迭代器 | 14. 文本分析管道 | 第13章 | 闭包、迭代器、HashMap |
| 智能指针 | 15. 双向链表 | 第15章 | Box、Rc、RefCell、Weak |
| 并发 | 16. 多线程下载器 | 第16章 | thread、channel、Arc、Mutex |
| 面向对象 | 17. 博客文章状态机 | 第17章 | trait 对象、状态模式 |
| 网络+线程池 | 18. 多线程Web服务器 | 第20章 | TcpListener、线程池、优雅关闭 |
依赖管理(所有项目通用)¶
环境:WSL (Ubuntu) + Zed 编辑器 + Cargo。所有命令在 WSL 终端执行。
动手写代码前,先掌握几个必用的工具命令(后续每个项目都会用到)。
创建新项目¶
创建后会生成目录结构:
添加依赖:cargo add(推荐)¶
不要手动编辑 Cargo.toml 写版本号,用 cargo add 会自动查询并写入最新版本:
cargo add rand # 自动添加 rand 的最新版本
cargo add reqwest # 自动添加 reqwest 的最新版本
cargo add serde --features derive # 带特性添加
cargo add serde serde_json # 一次添加多个
查找 crate:cargo search¶
不确定要用哪个 crate,或想知道某个包的最新版本,用 cargo search:
cargo search rand # 搜索 rand 并显示最新版本
# rand = "0.10.x" ← 显示可用的最新版本号
cargo search http
cargo search 关键词
版本号规则¶
Cargo.toml 中的 rand = "0.10" 表示"兼容 0.10.x 的最新补丁版本"(语义化版本 SemVer)。cargo update 可升级到允许范围内的最新版。
💡 提示:文档中的版本号仅作示例。请以
cargo search查询到的实际最新版本为准,用cargo add添加即可,不必手动改版本号。
结语¶
18 个项目基本对应书籍所有章节的核心知识,覆盖:所有权与借用、结构体枚举、递归下降解析、模块系统、错误处理、泛型与 trait、生命周期、测试、闭包迭代器、智能指针、并发、状态模式、网络编程。每个项目都能独立运行,建议按顺序重做一遍巩固理解。