Rust 网络编程:错误处理、MAC 地址与 HTTP 请求实现
1. 错误处理
在 Rust 编程中,处理多个上游 crate 产生的错误是一个常见的挑战。为了简化错误处理,我们可以使用特征对象(trait object)。
1.1 使用特征对象简化错误处理
以下代码展示了如何在返回值中使用特征对象 Box<dyn Error>
来简化错误处理:
use std::fs::File;
use std::error::Error;
use std::net::Ipv6Addr;
fn main() -> Result<(), Box<dyn Error>> {
let _f = File::open("invisible.txt")?;
let _localhost = "::1".parse::<Ipv6Addr>()?;
Ok(())
}
这里, Box<dyn Error>
表示任何实现了 Error
特征的类型。由于特征对象在编译时大小未知,所以需要用 Box
包装,因为 Box
在栈上有已知的大小。
1.2 自定义错误类型包装下游错误
当依赖项定义了各自的错误类型时,一个函数中存在多个错误类型会导致无法直接返回 Result