go 中recover捕获异常
2024-09-01 21:34:22
recover 仅在延迟函数 defer 中有效,在正常的执行过程中,调用 recover 会返回 nil 并且没有其他任何效果.
重要的事再说一遍:仅当在一个defer函数中被完成时,调用recover()才生效。
我们来一段错误的代码:
package main import "fmt" func main() {
recover() // 无任何作用
panic("停止运行")
recover() // 不会执行到
fmt.Println("结束")
}
输出:
panic: 停止运行 goroutine [running]:exit status
修改下,正确的代码:
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 [running]:
main.main()
exit status
总结:panic配合recover使用,recover要在defer函数中直接调用才生效。
最新文章
- [LeetCode] Container With Most Water 装最多水的容器
- phpexcel导入数据提示失败
- Java简介
- POST内容太大的问题
- java学习___File类的查看和删除
- iOS开发:在Swift中调用oc库
- find 与 tar命令连用
- 使用WebClient上传文件并同时Post表单数据字段到服务端
- COJ 2106 road
- [Qt] searchBox 搜索框实现
- Linux内核参数信息(Oracle相关)
- python识别html主要文本框
- hbase性能优化总结
- SpringIOC学习一
- RabbitMQ用户管理
- 快速索引 (对View的自定义)
- mysql的时区错误问题: The server time zone value &#39;&#214;&#208;&#185;&#250;&#177;&#234;&#215;&#188;&#202;&#177;&#188;&#228;&#39; is unrecognized or represents more than one
- 新年Flag,零基础程序媛编程学习计划(持续更新ing)~~
- 【Tomcat】上线部署tomcat。常用命令
- POJ--1797 Heavy Transportation (最短路)
热门文章
- [NACOS HTTP-GET] The maximum number of tolerable server reconnection errors has been reached
- SQL 数字转为中文大写
- 【实用工具】使用Java封装可执行exe应用全过程
- POJ 1651 Mulitiplication Puzzle
- POJ 1949 Chores
- Dubbo一致性哈希负载均衡的源码和Bug,了解一下?
- markdownPad在win10下渲染报错问题
- elasticsearch节点请求流程
- 2.成产出现 max(vachar2)取值问题
- 8种创建Java线程的方式,你知道几个?