1. Rust速通day3:引用与结构体实战解析
作为系统级编程语言,Rust的所有权机制和内存安全特性一直是其核心卖点。在实际开发中,引用和结构体是构建复杂系统的两大基石。今天我们就来深入探讨这两个特性在实际项目中的应用技巧。
1.1 引用:安全共享的艺术
Rust的引用分为可变引用(&mut T)和不可变引用(&T),这个设计完美解决了数据竞争问题。来看个实际场景:
rust复制fn process_data(data: &[i32]) -> i32 {
data.iter().sum()
}
fn modify_data(data: &mut Vec<i32>) {
data.push(42);
}
fn main() {
let mut numbers = vec![1, 2, 3];
let sum = process_data(&numbers);
modify_data(&mut numbers);
println!("Sum: {}, Modified: {:?}", sum, numbers);
}
这里有个关键细节:不可变引用可以有多个,但可变引用同时只能有一个。这个限制在并发编程中尤为重要,它让编译器能在编译期就发现数据竞争问题。
注意:当需要同时读写不同部分的数据时,可以使用
split_at_mut等方法安全地获取多个可变引用。
1.2 结构体:数据组织的利器
Rust的结构体比C/C++的更强大,来看个物联网设备建模的例子:
rust复制#[derive(Debug)]
struct IoTDevice {
id: String,
location: (f64, f64),
status: DeviceStatus,
last_update: std::time::SystemTime,
}
#[derive(Debug)]
enum DeviceStatus {
Online,
Offline,
Maintenance,
}
impl IoTDevice {
fn new(id: &str, lat: f64, lon: f64) -> Self {
Self {
id: id.to_string(),
location: (lat, lon),
status: DeviceStatus::Online,
last_update: std::time::SystemTime::now(),
}
}
fn update_location(&mut self, lat: f64, lon: f64) {
self.location = (lat, lon);
self.last_update = std::time::SystemTime::now();
}
}
结构体方法实现中,&self表
