简介
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