为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
墨色风雨 2021-12-07 18:51:00
当调用返回错误的 Go 函数时,我想知道如何处理非 nil 错误值。我可以中止、记录它或将它传递给调用者。或者它们的组合。但如果我能找出问题所在并以更细粒度的方式做出反应,那就更好了。因此,我如何才能找出可能的错误值及其含义?例如,我想使用该http.NewRequest功能。在文档中查找。在那里,它只是说有是可能的错误条件而不是哪些。我怎样才能知道这些?
查看完整描述

1 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

首先,如果你还没有读过,我建议你阅读这篇关于 Go 中的错误处理的博客文章,它可能会为你澄清一些事情。


至于找出 Go stdlib 函数可能的错误值,如果没有明确记录,一种选择是阅读代码。例如,在http.NewRequest函数上,您可以单击标题,这会将您带到源代码。您现在可以看到,当 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)

}

运行这个会给你解析错误,你可能想也可能不想在你的应用程序中以不同的方式处理:


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) 并以适当的方式处理该事件(记录、返回等)。


查看完整回答
反对 回复 2021-12-07
  • 1 回答
  • 0 关注
  • 158 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信