golang中recover和panic用法, goland里的try catch

前端之家收集整理的这篇文章主要介绍了golang中recover和panic用法, goland里的try catch前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

golang中没有try... catch...,所以当golang中遇到panic时,如果不进行recover,便会导致整个程序挂掉,具体例子如下:

[html] view plain copy
  1. packagemain
  2. import(
  3. "fmt"
  4. )
  5. funcmain(){
  6. panic("fault")
  7. fmt.Println("panic")
  8. }
  9. 运行结果:
  10. panic:fault
  11. goroutine16[running]:...
程序挂掉,并且报告出错的地方,并打印出掉用的栈


解决办理:利用defer延迟处理的recover进行恢复,具体例子如下:

copy

    deferfunc(){
  1. fmt.Println("1")
  2. }()
  3. deferfunc(){
  4. iferr:=recover();err!=nil{
  5. fmt.Println(err)
  6. }()
  7. fmt.Println("2")
  8. 运行结果:
  9. fault
  10. 1
程序首先运行panic,出现故障,此时跳转到包含recover()的defer函数执行,recover捕获panic,此时panic就不继续传递.但是recover之后,程序并不会返回到panic那个点继续执行以后的动作,而是在recover这个点继续执行以后的动作,即执行上面的defer函数输出1.

注意:利用recover处理panic指令,必须利用defer在panic之前声明,否则当panic时,recover无法捕获到panic,无法防止panic扩散.

原文链接:https://www.f2er.com/go/187891.html

猜你在找的Go相关文章