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

来源:互联网 发布:找一份网络兼职 编辑:程序博客网 时间:2024/05/18 02:19

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

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


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

[html] view plain copy
  1. package main  
  2.   
  3. import (  
  4.     "fmt"  
  5. )  
  6.   
  7. func main() {  
  8.     defer func() {  
  9.         fmt.Println("1")  
  10.     }()  
  11.     defer func() {  
  12.         if err :recover(); err != nil {  
  13.             fmt.Println(err)  
  14.         }  
  15.     }()  
  16.     panic("fault")  
  17.     fmt.Println("2")  
  18. }  
  19.   
  20. 运行结果:  
  21.   fault  
  22.   1  
程序首先运行panic,出现故障,此时跳转到包含recover()的defer函数执行,recover捕获panic,此时panic就不继续传递.但是recover之后,程序并不会返回到panic那个点继续执行以后的动作,而是在recover这个点继续执行以后的动作,即执行上面的defer函数,输出1.

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

原创粉丝点击