面试题答案
一键面试- 定义错误类型:
- 使用
thiserror
库来定义统一的错误类型,这样可以方便地处理不同类型的错误。
use thiserror::Error; #[derive(Error, Debug)] enum MyAppError { #[error("Network error: {0}")] NetworkError(#[from] reqwest::Error), #[error("String format error: {0}")] StringFormatError(#[from] serde_json::Error), }
- 使用
- 异步操作及错误处理:
- 使用
reqwest
进行网络请求,假设获取的数据是JSON格式,使用serde_json
进行解析。
use reqwest::Client; async fn fetch_and_parse() -> Result<String, MyAppError> { let client = Client::new(); let response = client.get("https://example.com/api/data").send().await?; let json_str = response.text().await?; let data: serde_json::Value = serde_json::from_str(&json_str)?; // 这里假设处理数据并返回字符串 Ok(data.to_string()) }
- 使用
- 异步任务链中的错误传递:
- 在异步任务链中,
?
操作符可以方便地传递错误。
async fn main() { match fetch_and_parse().await { Ok(result) => println!("Success: {result}"), Err(e) => eprintln!("Error: {e:?}"), } }
- 在异步任务链中,
通过上述步骤,我们定义了统一的错误类型,并在异步操作中妥善处理网络错误和字符串格式错误,同时在异步任务链中有效地传递和处理这些错误。