Rust 学习笔记 13:错误处理 (Error Handling)

Rust 学习笔记 13:错误处理 (Error Handling) “To err is human; to handle it safely is Rusty.” Go 开发者最熟悉的代码可能是 if err != nil。 Rust 也有类似的机制,但它利用强大的枚举类型 Result<T, E> 把错误处理提升到了一个新的高度。 Rust 将错误分为两类: 不可恢复错误:bug 导致的,比如数组越界。使用 panic!。 可恢复错误:文件未找到、网络超时等。使用 Result<T, E>。 1. Panic! (不可恢复错误) 当程序遇到无法处理的状况时(例如访问数组越界),Rust 会 panic。程序会打印错误信息,展开 (unwind) 栈,清理数据,然后退出。 1panic!("crash and burn"); 你也可以配置 Cargo.toml 让 panic 时直接 abort(不清理栈),以减小二进制体积。 2. Result (可恢复错误) 大部分时候我们不希望程序崩溃。 1enum Result<T, E> { 2 Ok(T), 3 Err(E), 4} 处理 Result 的标准姿势是 match: 1let f = File::open("hello.txt"); 2 3let f = match f { 4 Ok(file) => file, 5 Err(error) => panic!("Problem opening the file: {:?}", error), 6}; unwrap 和 expect: 如果你确定不会出错,或者为了省事(在 demo 代码中),可以使用 unwrap()。如果出错它会直接 panic。expect("msg") 则是带自定义消息的 unwrap。 ...

2025-03-11 · 2 min · 237 words · 老墨

[GoLang避坑实战-10] 不要 panic!Go 风格错误处理的"优雅避坑"指南

大家好,我是极客老墨。 写代码时,错误处理往往占了一半的工作量。文件打不开、网络连不上、数据格式不对,这些都是常态。Go 的错误处理很直接:错误就是一个返回值,你必须显式检查它。 这篇就聊聊 Go 的错误处理机制,看看它是怎么让代码更健壮的。 错误是值 Go 的核心理念:错误是值(Errors are values),不是异常。 error 接口 Go 内置的 error 是一个接口,只有一个方法: 1type error interface { 2 Error() string 3} 任何实现了 Error() string 方法的类型都是 error。 创建错误 1import "errors" 2 3// 方式 1:使用 errors.New 4err1 := errors.New("something went wrong") 5 6// 方式 2:使用 fmt.Errorf(支持格式化) 7err2 := fmt.Errorf("failed to open file: %s", filename) 8 9// 方式 3:自定义错误类型 10type MyError struct { 11 Code int 12 Msg string 13} 14 15func (e MyError) Error() string { 16 return fmt.Sprintf("error %d: %s", e.Code, e.Msg) 17} 要点: ...

2024-10-29 · 10 min · 2103 words · 老墨