博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
golang中recover和panic用法
阅读量:5777 次
发布时间:2019-06-18

本文共 811 字,大约阅读时间需要 2 分钟。

hot3.png

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

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

程序首先运行panic,出现故障,此时跳转到包含recover()的defer函数执行,recover捕获panic,此时panic就不继续传递.但是recover之后,程序并不会返回到panic那个点继续执行以后的动作,而是在recover这个点继续执行以后的动作,即执行上面的defer函数,输出1.

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

转载于:https://my.oschina.net/mickelfeng/blog/2354464

你可能感兴趣的文章
简单的servlet容器
查看>>
弄个收藏夹,用搜集文章,省的每次都去发一篇文。
查看>>
HTTP协议的头信息详解
查看>>
支付宝支付
查看>>
邮件服务器负载均衡大型企业部署方案
查看>>
Zabbix之监控交换机 (OID)
查看>>
3G模块拨号上网设置APN,拨号号码,帐号和密码
查看>>
kafka sink partition
查看>>
深入浅出讲解:php的socket通信
查看>>
mysql-5.6.x半同步复制配置
查看>>
pt-archiver Bug不会迁移max(id)那条数据的解决方法
查看>>
发布项目如何消除Log日志
查看>>
Linux 系统安全加固
查看>>
Facebook开源Fizz - 快速安全的TLS 1.3工具
查看>>
chown 命令
查看>>
12款很棒的浏览器兼容性测试工具
查看>>
几种典型的MQ应用场景
查看>>
java时区转换(GMT)
查看>>
solr的 group应用
查看>>
索引rebuild和rebuild online
查看>>