Rust学习路线制定
阶段一:环境搭建与基础语法
学习目标
- 安装Rust工具链
- 理解基本语法结构
- 掌握变量、数据类型和控制流
学习步骤
- 安装Rustup
- 使用
cargo new创建第一个项目
- 学习:
- 变量与不可变性(
let vs let mut)
- 基本数据类型(
i32, f64, bool, char)
- 控制流(
if/else, loop, while, for)
- 函数定义与模块化
练习题
- 编写程序打印"Hello, Rust!",并编译运行。
- 声明一个可变变量
x,初始值为5,随后修改为10并打印。
- 实现函数
is_even(num: i32) -> bool,判断数字是否为偶数。
- 使用
for循环计算1到100的和。
阶段二:所有权与引用
学习目标
- 理解所有权(Ownership)、借用(Borrowing)、生命周期(Lifetime)
- 避免常见内存错误
学习步骤
- 阅读《Rust程序设计语言》第4章
- 练习字符串(
String vs &str)操作
- 理解引用规则:
- 同一作用域内,要么一个可变引用,要么多个不可变引用
- 引用的生命周期不能超过其指向的数据
练习题
- 编写函数
calculate_length(s: &String) -> usize,返回字符串长度。
- 尝试在函数中转移字符串所有权,观察编译错误。
- 创建一个结构体
Person,包含name: String和age: u8,并编写方法introduce(&self)打印信息。
阶段三:结构体与枚举
学习目标
- 掌握结构体(Struct)和枚举(Enum)的定义与使用
- 学习模式匹配(
match)
学习步骤
- 定义包含不同类型字段的结构体
- 学习
impl块为结构体添加方法
- 使用
match处理枚举变体
练习题
- 定义结构体
Rectangle(宽/高),编写方法area计算面积。
- 创建枚举
Message,包含Quit、Move { x: i32, y: i32 }、Write(String),并用match处理各变体。
- 实现
Option<T>的简单版本,用match处理Some和None。
阶段四:错误处理
学习目标
- 使用
Result<T, E>和Option<T>处理错误
- 避免
panic!,学习unwrap与expect
学习步骤
- 阅读错误处理最佳实践
- 使用
?运算符传播错误
- 自定义错误类型
练习题
- 编写函数读取文件内容,处理
File::open可能的错误。
- 实现一个解析整数的函数,返回
Result<i32, ParseIntError>。
- 创建自定义错误类型
MyError,实现std::error::Error trait。
阶段五:泛型与Trait
学习目标
- 掌握泛型编程
- 理解Trait与Trait Bound
学习步骤
- 定义泛型函数和结构体
- 实现常见Trait(
Debug, Clone, Display)
- 学习
Iterator和Drop Trait
练习题
- 实现泛型函数
largest<T: PartialOrd>(list: &[T]) -> &T,返回列表中最大元素。
- 为结构体
Point<T>实现Display Trait,格式化输出坐标。
- 创建Trait
Drawable,包含方法draw(&self),并为结构体Circle和Square实现它。
阶段六:并发编程
学习目标
- 使用线程与消息传递(
std::thread,mpsc)
- 理解
Send和Sync Trait
学习步骤
- 创建线程处理并发任务
- 使用通道(Channel)在线程间传递数据
- 学习
Arc<Mutex<T>>共享状态
练习题
- 启动两个线程,分别计算1-500和501-1000的和,最后合并结果。
- 实现生产者-消费者模型:一个线程生成数字,另一个线程处理平方运算。
- 使用
Mutex保护共享的计数器,多个线程并发递增。
阶段七:高级特性(可选)
学习目标
- 宏(Macro)
- Unsafe Rust与FFI(Foreign Function Interface)
练习题
- 编写宏
vec_print!,打印向量所有元素。
- 通过FFI调用C函数
add(int a, int b),返回结果。
阶段八:项目实战
推荐项目
- CLI工具:实现文件内容统计(类似
wc)
- Web服务:用
actix-web搭建REST API
- 小游戏:终端贪吃蛇(使用
crossterm库)
学习资源