为了账号安全,请及时绑定邮箱和手机立即绑定

Go中如何指定和处理特定错误?

Go中如何指定和处理特定错误?

Go
森栏 2021-09-10 16:53:59
我写了这个非常基本的解析器,它通过 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 错误,它都会返回一个错误,并带有一条关于它是什么的消息。


查看完整回答
反对 回复 2021-09-10
  • 2 回答
  • 0 关注
  • 202 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信