Go语言-panic、recover和error
在Go语言中,一般的错误处理,通过error就够了,但是对于严重的错误,需要终止进程的操作,需要用到panic,与panic相关的还有recover,recover用来截获panic的错误信息。归纳如下:
error:处理一般性的错误
panic:处理需要终止程序的错误,并且会将堆栈里面的数据信息dump出来
recover:截获panic的异常错误信息,并能执行处理,使程序跳过panic继续执行而不会直接崩溃
func main() { testPanic(-10) fmt.Println("finish success") } // 测试panic func testPanic(param int) { defer func() { err := recover() if err != nil { fmt.Println("截获到panic异常",err) } }() if param < 0 { panic("参数不能小于0") } fmt.Println("input param:",param) }
执行结果:
截获到panic异常 参数不能小于0
finish success
可以看到通过panic抛出的错误被recover截获到了,并进行了处理。
需要注意的是:
1、recover必须结合panic和defer使用
2、recover必须和panic处于同一个协程里面
func main() { defer func() { err := recover() if err != nil { fmt.Println("截获到panic异常",err) } }() go testPanic(-10) fmt.Println("finish success") } // 测试panic func testPanic(param int) { if param < 0 { panic("参数不能小于0") } fmt.Println("input param:",param) }
执行结果:
finish success
可以看到recover在主协程中,而当panic发生在子协程中的时候,recover并不能截获到panic的异常信息。
☺☺☺爱学习的逗比☺☺☺
posted on 2022-04-14 19:33 funnyboy0128 阅读(215) 评论(0) 编辑 收藏 举报