ZBLOG

golang里err!=nil和panic revocer这两种错误处理机制的关系和区别是什么?

在 Golang 中,err!=nilpanic/recover是两种不同的错误处理机制。

  1. err!=nil

这个机制主要用于处理预期的错误,即可以被预测到的一些错误情况。在 Golang 中通常会将函数的返回值包含两部分:一个值和一个错误。如果函数执行过程中发生了预期的错误,那么就会返回一个非空的错误对象。当我们调用函数时,需要检查错误是否为空,如果不为空则采取相应的措施来处理这个错误。

例如:

f, err := os.Open("filename.txt")
if err != nil {
    log.Fatal(err)
}
defer f.Close()
// 处理文件

在这个代码片段中,如果打开文件失败,os.Open()会返回一个非空的错误对象,我们就需要将这个错误对象输出到日志中,并且退出程序。

  1. panic/recover

这个机制主要用于处理意外的错误,即无法预知的一些错误情况。当程序遇到一个致命错误时,比如数组越界、类型转换错误等,它会立即停止运行并抛出一个 panic 异常。在这种情况下,程序会停止运行,除非我们使用 recover 函数来捕获这个 panic,否则程序将崩溃。

例如:

func main() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered: ", r)
        }
    }()
    a := []int{1, 2, 3}
    fmt.Println(a[3])
}

在这个代码片段中,程序会抛出一个数组越界的 panic 异常,然后 defer 函数通过 recover() 捕获了这个异常,并输出了一条 Recovered: 的信息。

总结:

  • err!=nil 主要用于处理预期的错误。当函数执行过程中发生预期的错误时,返回一个非空的错误对象,需要检查错误是否为空并采取相应措施来处理这个错误。
  • panic/recover 主要用于处理意外的错误。当程序遇到一个致命错误时,抛出一个 panic 异常,程序会停止运行。可以使用 recover 函数来捕获这个 panic 异常,使程序不会崩溃。注意:panic/recover 不应该被用于处理可预测的错误,它们只适用于必须立即停止程序的情况。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=1012

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?