ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
### 概述 运行时panic异常一旦被引发就会导致程序崩溃.这当然不是我们愿意看到的,因为谁也不能保证程序不 会发生任何运行时错误. 不过go语言为我们提供了专用于"拦截"运行时panic的内建函数--recover. 它可以是当前的程序从运行时 panic的状态中恢复并重新获得流程控制权 . ~~~ func recover () interface{} ~~~ ## 注意 : recover只有在defer调用的函数中有效 如果调用了内置函数recover,并且定义该defer语句的函数发生了panic异常,recover会使程序从panic中恢 复,并返回panic value.导致panic异常的函数不会继续运行,但能正常返回.在未发生panic时调用recover, recover会返回nil . 还有就是该defer 必须写在panic 发生时的上方,如果是下方,就执行不到了. ### 实例 ~~~ func test1() { fmt.Println("111") } func test2(x int) { //设置recover defer func() { if err := recover(); err != nil { fmt.Println(err) //有异常才会打印,没有异常就不打印了 } }() var a [10]int a[x] = 100 // defer func() { 放在这里是执行不到的,因为都panic了 // if err := recover(); err != nil { // fmt.Println(err) // } // }() } func test3() { fmt.Println("333") } func main() { test1() test2(20) test3() } ~~~ ~~~ 111 runtime error: index out of range 333 ~~~