浅记golang的panic
可以把panic理解为一种trycatch
但是只用于捕获致命错误,而不应该用于报告普通错误:比如当某些不应该发生的场景发生时,我们就应该调用panic(数组越界、空指针异常等)
当发生异常并且被panic捕获时,程序会中断运行,然后执行defer
在go语言设计时,函数便搞上了一个多返回值,虽然十分冗杂,每次都要用if err != nil
但是,真要捕获异常并抛出,还得是用panic
package main
import "fmt"
func main(){
fmt.Println("c")
defer func(){ // 必须要先声明defer,否则不能捕获到panic异常
fmt.Println("d")
if err:=recover();err!=nil{
fmt.Println(err) // 这里的err其实就是panic传入的内容,55
}
fmt.Println("e")
}()
f() //开始调用f
fmt.Println("f") //这里开始下面代码不会再执行
}
func f(){
fmt.Println("a")
panic("异常信息")
fmt.Println("b") //这里开始下面代码不会再执行
fmt.Println("f")
}
输出结果:
c
a
d
异常信息
e