panic 和 recover的区别
Posted jianyingjie
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了panic 和 recover的区别相关的知识,希望对你有一定的参考价值。
panic:
1.报告致命错误的一种方式,如:数组访问越界,空指针引用等。
2.panic异常发生时,程序会中断运行。
import "fmt" func testa() { fmt.Println("aaaaaaaaa") } func testb(i int) { fmt.Println("bbbbbbbbb") arr := [10]int{} // var arr [10]int arr[i] = 123 // panic("this is a panic test") } func testc() { fmt.Println("ccccccccc") } func main() { testa() testb(10) testc() }
结果:
recover:
panic异常一旦被引发就会导致程序崩溃。
所以Go语言提供了专用于“拦截”运行时panic的内建函数—recover。
它可以使当前程序从panic的状态中恢复,重新获得流程控制权,并返回panic value。
在未发生panic时调用recover,recover会返回nil。
注意:recover只有在defer调用的函数中有效。
import "fmt" func testb(x int) { defer func() { // recover() // fmt.Println(recover()) if err := recover(); err != nil { fmt.Println("err 是:", err) } }() var a [10]int a[x] = 123 } func testc() { fmt.Println("ccccccccccc") } func main() { testb(11) testc() }
结果:
以上。
以上是关于panic 和 recover的区别的主要内容,如果未能解决你的问题,请参考以下文章