运行panic异常一旦被引发就会导致程序崩溃,这当然不是我们愿意看到的,go语言提供乐专用于“拦截”运行时panic的内建函数-recover,它可以是当前的程序从运行时panic的状态中恢复并重新获得流程控制权。
注意:recover只有在defer调用的函数中有效
如果调用了内置函数recover,并且定义该defer语句的函数发生了panic异常,recover会使用程序从panic中恢复,并且返回panic value,导致panic异常的函数不会继续执行,但能正常返回。在未发生panic时调用recover,recover会返回nil。
package main
import "fmt"
func testa(){
fmt.Println("aaaaaaa")
}
func testb(x int){
//设置recover,
defer func(){
//recover()可以打印panic的错误信息
//fmt.Println(recover())
if err := recover(); err != nil{ //产生了panic异常
fmt.Println(err)
}
}()
var a [10]int
a[x] = 111
}
func testc(){
fmt.Println("ccccccc")
}
func main(){
testa()
testb(20)
testc()
}
网友评论