《Rust 编程第一课》 学习笔记 Day 4

135 阅读1分钟

大家好,我是砸锅。一个摸鱼八年的后端开发。熟悉 Go、Lua。第四天还是继续和大家一起学习 Rust😊

模式匹配

可以对 enum 内层的数据进行匹配并赋值

fn process_event(event: &Event) {
	match event {
		Event::Join((uid, _tid)) => println!("user {:?} joined", uid),
		Event::Leave((uid, tid)) => println!("user {:?} left {:?}", uid, tid),
}
}

除了 match 匹配之外,还有 if let / while let 可以做简单的匹配

错误处理

Rust 将错误封装在 Result<T, E> 类型里,同时提供了 ?操作符来传播错误。Result<T, E> 类型是一个泛型数据结构,T 代表成功执行返回的结果类型, E 代表错误类型

Rust 项目组织

在 Rust 里,无法用单一文件承载代码时,可以使用 mod 来组织代码。具体方式是在项目入口文件里,用 mod 来声明要加载的其他代码文件一个项目也称为一个 crate,crate 可以是可执行项目,也可以是一个库,可以使用 cargo new <name> —lib 来创建一个库。Rust 的单元测试通常放在和被测代码相同的文件中,使用条件编译 #[cfg(test)] 来确保测试代码只在测试环境下编译

集成测试一般放在 tests 目录下,和 src 平行。集成测试只能测试 crate 下公开接口,编译时编译成单独的可执行文件

在 crate 下,可以使用 cargo test 来运行测试用例

当项目规模变大之后,可以使用 workspace 来包含多个 crates,当代码发生改变时,就只需要将涉及到的 crates 重新编译

如何编写 Rust 测试代码