主要观点:
- 2025 年 Rust 社区的常规错误处理实践是库用
thiserror
暴露尽可能多信息的错误类型,应用用anyhow
简单传播错误。 - 结构化错误的主要好处虽在某些场景不适用,但仍有诸多其他好处,如能一眼看到函数所有潜在失败模式、通过签名理解函数、避免重复、减少错误相关代码等。
- 自定义错误有代码多、需依赖第三方库、需思考代码结构和命名、需维护命名和错误类型等缺点,在性能方面也有考量,评估需视情况而定。
关键信息:
thiserror
可去除实现Display
、Error
和From
的样板代码,对能承受宏依赖的库很有用。anyhow
提供“通用”动态错误类型,处理更方便。- 自定义错误可添加额外数据和功能,如序列化、关联退出码、HTTP 状态码等。
- 讨论了自定义错误在库中的一些潜在问题及后续要讨论的内容。
重要细节:
- 库应提供结构化错误类型以方便调用者检测和处理特定错误。
- 应用常只向上传播错误,不匹配特定错误条件,此时
anyhow
更常用。 - 自定义错误在代码审查、接口描述等方面有优势,但也有代码多等缺点。
- 性能方面,
anyhow::Error
内容堆分配等,自定义错误可配置。 - 提到一些关于结构化错误的好文章及讨论链接。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。