Recover 是一个Go语言的内建函数,可以让进入宕机流程中的 goroutine 恢复过来,recover 仅在延迟函数 defer 中有效,在正常的执行过程中,调用 recover 会返回 nil 并且没有其他任何效果,如果当前的 goroutine 陷入恐慌,调用 recover 可以捕获到 panic 的输入值,并且恢复正常的执行。
package main
import (
"fmt"
)
func main() {
a := returnN()
fmt.Println(a)
}
func returnN() (result int) {
defer func() {
if p:=recover();p!=nil{
result = p.(int)
}
}()
panic(3)
}
image.png
执行结果如上图,panic宕机,recover捕捉到了panic输入的3,所以p就是返回异常“3”
p.(int)就将异常转换为int型返回了
网友评论