demo.go(panic异常):
package main
import "fmt"
func main() {
fmt.Println("11111")
panic("异常信息") // 手动抛出panic异常(运行时异常)
fmt.Println("22222") // 异常之后的代码不会执行
}
demo.go(recover()拦截异常,捕获异常):
package main
import "fmt"
func main() {
var arr [3]int
// 延迟调用匿名函数 (匿名函数在主函数结束之前最后调用,可以捕获主函数中的异常)
defer func() {
err := recover() // recover() 捕获panic异常,获得程序执行权。
fmt.Println("recover()后的内容!!") // recover()后的内容会正常打印
if err != nil {
fmt.Println(err) // runtime error: index out of range
}
}()
index := 10
arr[index] = 10 // 会抛出panic异常 (数组下标越界)
fmt.Println("异常发生后的内容!!") // 异常之后的内容不会打印
}