【发布时间】:2016-11-15 14:15:50
【问题描述】:
我已经使用 Go 有一段时间了,但还没有真正确定我是如何处理错误的。
即使是标准库也有许多不同的方法来处理错误(有些甚至无法在不求助于字符串匹配的情况下检查错误)。
我最近阅读了 Dave Cheney 的博文 Inspecting Errors。这听起来像是朝着正确方向迈出的一步,但我仍然很难真正投入使用。
假设我已经制作了一个包a,它向第 3 方 REST API(例如 Facebook Graph)发出请求。我希望这个包能够公开与 API 匹配的函数 - 比如说GetUser。
致电GetUser 会产生多种结果:
- 成功
- 由于请求失败(例如 3rd 方 API 关闭)而失败
- 第 3 方 API 返回错误(如未找到用户)
- 响应或类似的反序列化失败
断言行为错误在第二种情况下非常有效。但是它在区分第三种和第四种情况方面存在不足。
我当前的用例是实现我自己的使用第一个包的 REST API。在这种情况下,我希望能够分别返回200 OK、503 Service Unavailable、400 Bad Request、500 Internal Server Error 对可能结果的响应。
在不必包含从包a 返回http 响应代码或类似代码的情况下,解决此问题的通用方法是什么?
【问题讨论】:
标签: go error-handling