沙滩星空的博客沙滩星空的博客

Go语言错误捕捉函数recover()的用法

简介

Go 语言 中,当程序无法处理错误时,panic 被触发。程序会终止运行。
我们希望程序发生错误后,我们能够做一些处理,保证程序可以继续运行。
这时,就需要使用异常恢复,即 recover。Golang 中的 recover 一般是配套 defer 使用。

使用原则:

  • defer 要放在 panic 之前定义
  • recover 只有在 defer 调用的函数中才有效。
  • recover 处理异常后,逻辑并不会恢复到 panic 那个点去,函数跑到 defer 之后的那个点。
  • 多个 defer 会形成 defer 栈,后定义的 defer 语句会被最先调用
package main
import (
    "fmt"
    "time"
)
func main() {
    f()
    fmt.Println("end")
}
func f() {
    defer func() {
        fmt.Println("defer start")
        if err := recover(); err != nil {
            fmt.Println(err)
        }
        fmt.Println("defer end")
    }()
    for {
        fmt.Println("func begin")
        a := []string{"a", "b"}
        fmt.Println(a[3])
        fmt.Println("func end")
        time.Sleep(1 * time.Second)
    }
}

输出:

func begin
defer start
runtime error: index out of range [3] with length 2
defer end
end

Go语言recover https://blog.csdn.net/nexttrial/article/details/120195801
Go:程序如何恢复(recover) https://zhuanlan.zhihu.com/p/434655019
未经允许不得转载:沙滩星空的博客 » Go语言错误捕捉函数recover()的用法

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址