为什么在 Rust 应用程序中使用结构化错误?

主要观点:

  • 2025 年 Rust 社区的常规错误处理实践是库用 thiserror 暴露尽可能多信息的错误类型,应用用 anyhow 简单传播错误。
  • 结构化错误的主要好处虽在某些场景不适用,但仍有诸多其他好处,如能一眼看到函数所有潜在失败模式、通过签名理解函数、避免重复、减少错误相关代码等。
  • 自定义错误有代码多、需依赖第三方库、需思考代码结构和命名、需维护命名和错误类型等缺点,在性能方面也有考量,评估需视情况而定。

关键信息:

  • thiserror 可去除实现 DisplayErrorFrom 的样板代码,对能承受宏依赖的库很有用。
  • anyhow 提供“通用”动态错误类型,处理更方便。
  • 自定义错误可添加额外数据和功能,如序列化、关联退出码、HTTP 状态码等。
  • 讨论了自定义错误在库中的一些潜在问题及后续要讨论的内容。

重要细节:

  • 库应提供结构化错误类型以方便调用者检测和处理特定错误。
  • 应用常只向上传播错误,不匹配特定错误条件,此时 anyhow 更常用。
  • 自定义错误在代码审查、接口描述等方面有优势,但也有代码多等缺点。
  • 性能方面,anyhow::Error 内容堆分配等,自定义错误可配置。
  • 提到一些关于结构化错误的好文章及讨论链接。
阅读 12
0 条评论