掌握 ? 操作符链式传播、自定义 Error 类型、thiserror 与 anyhow 库在工程中的选型与实战策略。

1. 问号操作符 (?) 的解包与自动转换

? 操作符用于简化错误传播。当遇到 Err 时提前返回,并自动调用 From::from 进行错误类型转换:

use std::fs::File;
use std::io::{self, Read};

fn read_username_from_file() -> Result<String, io::Error> {
    let mut s = String::new();
    File::open("hello.txt")?.read_to_string(&mut s)?;
    Ok(s)
}