当调用返回错误的Go函数时,我想知道如何处理非零错误值。我可以中止,记录或传递给调用者。或其组合。但如果我发现出了什么问题并以更细粒度的方式做出反应会更好。
那么,我怎样才能找出可能的错误值及其含义?例如,我想使用http.NewRequest
函数。查找in the docs。在那里,它只说有可能的错误条件,但不是哪些。我怎么能找到这些?
首先,如果你尚未阅读,我建议阅读this blog article about error handling in Go,它可能会为你澄清一些事情。
至于找出Go stdlib函数的可能错误值,如果没有明确记录,一个选项是去读取代码。例如,在http.NewRequest函数上,您可以单击标题,它将带您到the source code。在那里你可以看到,当URL解析失败时,它只在一种情况下返回错误。探索url.Parse
函数,你会发现它可能会返回url.Error
,你可以使用类型断言检查它:
package main
import (
"log"
"net/http"
"net/url"
)
func main() {
r, err := http.NewRequest("GET", "http://[fe80::%31%25en0]:8080/", nil)
if perr, ok := err.(*url.Error); ok && perr != nil {
log.Fatal("Parse error, check URL formatting: ", perr)
} else if err != nil {
log.Fatal("Error creating HTTP request")
}
// ... success case
log.Println(r)
}
Running this为您提供解析错误,您可能希望或可能不希望在您的应用程序中以不同方式处理:
2009/11/10 23:00:00 Parse error, check URL formatting: parse http://[fe80::%31%25en0]:8080/: percent-encoded characters in host
我同意JimB的评论,特别是检查这种情况下的错误类型可能不是一件有用的事情。在99.99%的情况下,您需要知道的是创建请求失败(err != nil
)并以适当的方式处理该可能性(记录,返回等)。