我写了这个非常基本的解析器,通过Reddit JSON,我很好奇如何在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
}
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语句?有没有办法在switch语句中使用err
?
答案 0 :(得分:1)
首先请注意,http.Get不会返回HTTP返回的错误,该错误不是200.即使服务器发出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错误,都会返回错误,并显示错误信息。
答案 1 :(得分:0)
当然可以:
package main
import "fmt"
func main() {
var err error
switch err {
case nil:
fmt.Println("Is nil")
}
}