我写了这个非常基本的解析器,它通过 Reddit JSON 并且很好奇我如何在 Go 中专门管理错误。例如,我有一个链接的“获取”方法:func Get(reddit string) ([]Item, error) { url := fmt.Sprintf("http://reddit.com/r/%s.json", reddit) resp, err := http.Get(url) if err != nil { return nil, err } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { return nil, err } /* * Other code here */}例如,我如何处理来自 StatusCode 的 404 错误?我知道我可以测试 404 错误本身:if resp.StatusCode == http.StatusNotfound { //do stuff here}但是有没有一种方法可以直接管理而resp.StatusCode != http.StatusOK不用写一堆 if 语句?有没有办法可以err在 switch 语句中使用?
2 回答
ABOUTYOU
TA贡献1812条经验 获得超5个赞
首先请注意,对于不是 200 的 HTTP 返回值,http.Get不会返回错误。即使服务器给它一个 404 错误,Get 也成功地完成了它的工作。从文档
非 2xx 响应不会导致错误。
Therfore在你的代码,err会nil当你调用这个这意味着它将返回err=nil这可能是不是你想要的。
if resp.StatusCode != http.StatusOK {
return nil, err
}
这应该做你想做的
if resp.StatusCode != http.StatusOK {
return nil, fmt.Errorf("HTTP Error %d: %s", resp.StatusCode, resp.Status)
}
对于任何类型的 HTTP 错误,它都会返回一个错误,并带有一条关于它是什么的消息。
- 2 回答
- 0 关注
- 202 浏览
添加回答
举报
0/150
提交
取消