如何找到Go标准库函数的可能错误值?

时间:2016-02-05 21:21:41

标签: api go error-handling

当调用返回错误的Go函数时,我想知道如何处理非零错误值。我可以中止,记录或传递给调用者。或其组合。但如果我发现出了什么问题并以更细粒度的方式做出反应会更好。

因此,我如何找出可能的错误值及其含义?例如,我想使用http.NewRequest函数。查一查in the docs。在那里,它只说可能的错误条件,而不是哪些错误条件。我怎么能找到这些?

1 个答案:

答案 0 :(得分:0)

首先,如果您尚未阅读,我建议您阅读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)并以适当的方式处理该可能性(记录,返回等)。