golang中recover和panic用法
2014-12-16 21:03
465 查看
golang中没有try... catch...,所以当golang中遇到panic时,如果不进行recover,便会导致整个程序挂掉,具体例子如下:
解决办理:利用defer延迟处理的recover进行恢复,具体例子如下:
注意:利用recover处理panic指令,必须利用defer在panic之前声明,否则当panic时,recover无法捕获到panic,无法防止panic扩散.
package main import ( "fmt" ) func main() { panic("fault") fmt.Println("panic") } 运行结果: panic: fault goroutine 16 [running]:...程序挂掉,并且报告出错的地方,并打印出掉用的栈
解决办理:利用defer延迟处理的recover进行恢复,具体例子如下:
package main import ( "fmt" ) func main() { defer func() { fmt.Println("1") }() defer func() { if err := recover(); err != nil { fmt.Println(err) } }() panic("fault") fmt.Println("2") } 运行结果: fault 1 <span style="color:#FF0000;"> </span>程序首先运行panic,出现故障,此时跳转到包含recover()的defer函数执行,recover捕获panic,此时panic就不继续传递.但是recover之后,程序并不会返回到panic那个点继续执行以后的动作,而是在recover这个点继续执行以后的动作,即执行上面的defer函数,输出1.
注意:利用recover处理panic指令,必须利用defer在panic之前声明,否则当panic时,recover无法捕获到panic,无法防止panic扩散.
相关文章推荐
- golang的defer,recover,panic用法
- golang之defer,panic,recover用法
- golang中recover和panic用法, goland里的try catch
- golang中recover和panic用法
- GO_05_2:Golang 中 panic、recover、defer 的用法
- golang中recover和panic用法
- GOLANG的PANIC和RECOVER
- golang学习的点点滴滴:异常处理 defer, panic, recover
- golang之defer、panic、recover
- Golang中的defer, panic, recover
- golang错误处理之panic和recover
- Golang的panic和recover
- golang基础-new_make、recover_panic、append、闭包
- Golang从入门到精通(二十一):Golang错误处理之panic-recover
- golang 函数-defer-recover-panic
- Golang 中的 panic 与 recover 理解
- golang panic and recover
- golang recover panic 流程控制的可达与不可达
- golang recover from panic situation: - reflect: call of reflect.Value.Elem on struct Value
- golang 使用defer、panic、recover的问题