主要观点:Go 中处理错误简单灵活但无结构,随着代码库增长会出现诸多问题,如错误消息不一致、处理方式不同等,于是创建了新的错误框架,包括集中式和结构化的错误代码等,介绍了框架的设计、实现、测试及迁移等方面,最终提升了错误处理的效果和效率。
关键信息:
- Go 错误是值,可通过实现
error
接口来创建错误,各包可定义自己的错误处理策略。 - 早期采用常见错误处理方法但随着问题增多出现诸多弊端,如错误声明混乱、日志不一致等。
- 新的错误框架采用集中式和结构化的错误代码,定义在中心位置,各层服务或库返回自己的命名空间代码,所有错误实现
Error
接口等。 - 介绍了框架的核心包和类型,如
errors
包、Error
接口等,以及创建和包装错误、添加上下文等用法。 - 阐述了声明新错误代码的方式,包括
Code
的实现、Error
类型与Code
类型的对应等。 - 提到了测试用例编写及迁移过程中的注意事项,如搜索替换、逐个迁移包、添加测试等。
重要细节: - Go 提供多种处理错误的工具,如
errors.New()
、fmt.Errorf()
等,实践中有多种错误处理模式。 - 新框架中不同类型的错误
Error
、Error0
、VlError
、ApiError
及其用法和特点。 - 声明错误代码时要注意运行生成脚本,使用
api-code
标记供外部 API 使用的代码,在 protobuf 中声明映射等。 - 迁移过程中要谨慎处理,从搜索替换开始,逐个迁移包,添加缺失的测试等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。