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

问题描述 投票:0回答:1

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

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

api go error-handling
1个回答
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)并以适当的方式处理该可能性(记录,返回等)。

© www.soinside.com 2019 - 2024. All rights reserved.