Rust 入门学习笔记
为什么学 Rust
Rust 连续多年被评为”最受喜爱的编程语言”。它在保证内存安全的同时,提供了接近 C/C++ 的性能,没有垃圾回收的开销。
所有权系统
Rust 最核心的概念就是所有权(Ownership)。每个值都有一个所有者,且同一时间只能有一个所有者:
fn main() {
let s1 = String::from("hello");
let s2 = s1; // s1 的所有权转移给了 s2
// println!("{}", s1); // ❌ 编译错误!s1 已经无效
println!("{}", s2); // ✅ 正常
}借用与引用
如果不想转移所有权,可以使用引用(借用):
fn calculate_length(s: &String) -> usize {
s.len()
}
fn main() {
let s = String::from("hello");
let len = calculate_length(&s);
println!("'{}' 的长度是 {}", s, len); // s 仍然有效
}模式匹配
Rust 的 match 表达式非常强大:
enum Command {
Quit,
Echo(String),
Move { x: i32, y: i32 },
Color(u8, u8, u8),
}
fn process(cmd: Command) {
match cmd {
Command::Quit => println!("退出"),
Command::Echo(msg) => println!("回显: {}", msg),
Command::Move { x, y } => println!("移动到 ({}, {})", x, y),
Command::Color(r, g, b) => println!("颜色: #{:02x}{:02x}{:02x}", r, g, b),
}
}错误处理
Rust 使用 Result 和 Option 来处理错误,而不是异常:
use std::fs;
use std::io;
fn read_config(path: &str) -> Result<String, io::Error> {
let content = fs::read_to_string(path)?;
Ok(content.trim().to_string())
}
fn main() {
match read_config("config.toml") {
Ok(config) => println!("配置内容: {}", config),
Err(e) => eprintln!("读取失败: {}", e),
}
}? 运算符是 Rust 错误处理的语法糖,它会自动将错误向上传播。
学习资源推荐
- The Rust Programming Language - 官方教程,必读
- Rust by Example - 通过示例学习
- Rustlings - 交互式练习
学习感受
Rust 的学习曲线确实比较陡峭,尤其是所有权和生命周期的概念。但一旦理解了这些核心概念,写代码会变得很顺畅。编译器的错误提示非常友好,基本上按照提示修改就能解决问题。
