Error handling 如何指定和处理Go中的特定错误?
我编写了这个非常基本的解析器,它通过RedditJSON进行分析,我很好奇如何专门管理Go中的错误 例如,我有一个链接的“Get”方法:Error handling 如何指定和处理Go中的特定错误?,error-handling,go,Error Handling,Go,我编写了这个非常基本的解析器,它通过RedditJSON进行分析,我很好奇如何专门管理Go中的错误 例如,我有一个链接的“Get”方法: 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
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
*/
}
比如说,我如何处理来自状态码的404错误?我知道我可以测试404错误本身:
if resp.StatusCode == http.StatusNotfound {
//do stuff here
}
但是有没有办法直接管理resp.StatusCode!=http.StatusOK
而不必编写一堆if语句?有没有一种方法可以在switch语句中使用err
?首先请注意,对于不是200的HTTP返回,不会返回错误。即使服务器给它一个404错误,Get也成功地完成了它的工作。从文件中
非2xx响应不会导致错误
因此,在您的代码中,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错误,它都会返回一个错误,并显示一条关于错误内容的消息。确定您可以:
package main
import "fmt"
func main() {
var err error
switch err {
case nil:
fmt.Println("Is nil")
}
}