主要观点:Go 中不应简单地“return err”,而应添加与调试相关的缺失细节。通过在错误处理代码中编写自定义消息,能提供更多调试有用的信息,如os.ReadFile
添加文件名,且不依赖代码行号,消息更持久且可独立理解。同时介绍了errors.Is
和errors.As
用于编程检测错误,还给出了生产代码中复杂错误处理的示例,展示如何添加调试上下文。
关键信息:
- Go 错误处理的错误模式“return err”是不良的反模式。
- 通过
fmt.Errorf
添加详细错误消息,如“mtls: building tls.Config from ClientConfig.CAPath: %w”。 errors.Is
可用于编程检测“文件未找到”错误。- 生产代码中
readAndUnpack
函数展示了复杂错误处理及添加调试上下文的方式。
重要细节:
- 在
BuildTLSConfig
函数中改进错误处理,添加更详细的错误信息。 - 生产代码中根据不同错误情况创建自定义错误类型
newError
。 - 示例代码中对各种错误条件的处理及错误信息的添加。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。