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

我写了这个非常基本的解析器,它通过 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 语句中使用?


森栏
浏览 203回答 2
2回答

ABOUTYOU

首先请注意,对于不是 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 错误,它都会返回一个错误,并带有一条关于它是什么的消息。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go