https://www.alexisbouchez.com/blog/http-error-handling-in-go
在这篇短文中,我将与你分享一个我用来集中处理 HTTP 处理程序的错误的简单模式。
如果你写过一些 Go HTTP 服务器,你可能已经厌倦了一遍又一遍地编写相同的错误处理代码:
|
|
这段代码重复性很高,并且用样板代码塞满了你的处理程序,而不是业务逻辑。
一个更好的方法
核心思想很简单:更改你的处理程序以返回错误,而不是直接处理它们。
第一步:定义自定义 HTTP 错误
|
|
第二步:创建一个处理函数包装器
|
|
这个包装器完成了所有繁重的错误处理工作。它使用 errors.As() 来检查错误是否为 HTTPError 并提取状态码。
第三步:添加特定于方法的小助手
|
|
第四步:编写简洁的处理程序
|
|
看看现在的处理程序多么简洁!它专注于自己的工作,而不是错误处理的杂技。
下一步是什么?
一旦你掌握了这个模式,你可以:
- 使用 JSON 响应:以 JSON 格式返回 API 端点的错误
- 添加请求 ID:在日志和响应中传递请求 ID
- 构建错误感知中间件:创建可与返回错误的处理器协同工作的中间件
- 改进错误页面:用适当的错误页面替换纯文本错误
这种模式适用于任何接受标准 Go 处理程序的router。这是一个很小的改动,但对代码质量和可维护性产生了巨大的影响。
