错误,到处都是错误:我们如何集中和结构化错误处理

主要观点:Go 中处理错误简单灵活但无结构,随着代码库增长会出现诸多问题,如错误消息不一致、处理方式不同等,于是创建了新的错误框架,包括集中式和结构化的错误代码等,介绍了框架的设计、实现、测试及迁移等方面,最终提升了错误处理的效果和效率。
关键信息:

  • Go 错误是值,可通过实现error接口来创建错误,各包可定义自己的错误处理策略。
  • 早期采用常见错误处理方法但随着问题增多出现诸多弊端,如错误声明混乱、日志不一致等。
  • 新的错误框架采用集中式和结构化的错误代码,定义在中心位置,各层服务或库返回自己的命名空间代码,所有错误实现Error接口等。
  • 介绍了框架的核心包和类型,如errors包、Error接口等,以及创建和包装错误、添加上下文等用法。
  • 阐述了声明新错误代码的方式,包括Code的实现、Error类型与Code类型的对应等。
  • 提到了测试用例编写及迁移过程中的注意事项,如搜索替换、逐个迁移包、添加测试等。
    重要细节:
  • Go 提供多种处理错误的工具,如errors.New()fmt.Errorf()等,实践中有多种错误处理模式。
  • 新框架中不同类型的错误ErrorError0VlErrorApiError及其用法和特点。
  • 声明错误代码时要注意运行生成脚本,使用api-code标记供外部 API 使用的代码,在 protobuf 中声明映射等。
  • 迁移过程中要谨慎处理,从搜索替换开始,逐个迁移包,添加缺失的测试等。
阅读 3
0 条评论