go 中recover捕获异常
时间:2019-12-18
本文章向大家介绍go 中recover捕获异常,主要包括go 中recover捕获异常使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
recover 仅在延迟函数 defer 中有效,在正常的执行过程中,调用 recover 会返回 nil 并且没有其他任何效果.
重要的事再说一遍:仅当在一个defer函数中被完成时,调用recover()才生效。
我们来一段错误的代码:
package main import "fmt" func main() { recover() // 无任何作用 panic("停止运行") recover() // 不会执行到 fmt.Println("结束") }
输出:
panic: 停止运行 goroutine 1 [running]:exit status 2
修改下,正确的代码:
package main import "fmt" func main() { defer func() { fmt.Println("捕获到异常:", recover()) }() panic("手动抛出异常") }
输出:
捕获到异常: 手动抛出异常
重要的事再说一遍:recover()的调用仅当它在defer函数中被直接调用时才有效。
继续来看一段错误的代码:
package main import "fmt" func doRecover() { fmt.Println("捕获到异常 =>", recover()) //输出: 捕获到异常 => <nil> } func main() { defer func() { doRecover() //注意:这里间接使用函数,在函数中调用了recover()函数, // panic 没有恢复,没有捕获到错误信息 }() panic("手动抛出异常") }
输出:
捕获到异常 => <nil> panic: 手动抛出异常 goroutine 1 [running]: main.main() exit status 2
总结:panic配合recover使用,recover要在defer函数中直接调用才生效。
原文地址:https://www.cnblogs.com/phpper/p/12059701.html
- ASP.NET Core中使用IOC三部曲(三.采用替换后的Autofac来实现AOP拦截)
- 【weakfilescan】敏感文件扫描工具
- ASP.NET Core中使用IOC三部曲(二.采用Autofac来替换IOC容器,并实现属性注入)
- ASP.NET Core中使用IOC三部曲(一.使用ASP.NET Core自带的IOC容器)
- CVE-2017-11882漏洞复现
- ASP.NET Core使用静态文件、目录游览与MIME类型管理
- Python 黑客——使用Python破解门禁系统
- ASP.NET Core文件上传与下载(多种上传方式)
- 采用Opserver来监控你的ASP.NET项目系列(三、监控你的服务器状态)
- eclipse中运行hbase时不能显示表中的值
- 从 PHP 到 Java
- 用Lua定制Redis命令
- 见招拆招-PostgreSQL中文全文索引效率优化
- 通过2-3-4树理解红黑树
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- LeetCode40|有序数组中的单一元素
- 搭建简易的物联网服务端和客户端-Cortana控制(十七)
- LeetCode39|找树左下角的值
- LeetCode38|根据字符出现频率排序
- 搭建简易的物联网服务端和客户端-Nodejs_PM2(十八)
- spring boot 项目中自动执行 sql 语句
- 搭建简易的物联网服务端和客户端-邮件通知(十九)
- LeetCode37|两颗二叉搜索树中所有元素
- LeetCode45|数组中重复的数据
- 搭建简易的物联网服务端和客户端-网络控制(二十)
- LeetCode44|在每个树行中找最大值
- LeetCode43|最大层内元素和
- 搭建简易的物联网服务端和客户端-Maibu控制(二十一)
- LeetCode42|层数最深叶子节点的和
- LeetCode41|数组中数组出现的次数