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函数中直接调用才生效。

最新文章

  1. [LeetCode] Container With Most Water 装最多水的容器
  2. phpexcel导入数据提示失败
  3. Java简介
  4. POST内容太大的问题
  5. java学习___File类的查看和删除
  6. iOS开发:在Swift中调用oc库
  7. find 与 tar命令连用
  8. 使用WebClient上传文件并同时Post表单数据字段到服务端
  9. COJ 2106 road
  10. [Qt] searchBox 搜索框实现
  11. Linux内核参数信息(Oracle相关)
  12. python识别html主要文本框
  13. hbase性能优化总结
  14. SpringIOC学习一
  15. RabbitMQ用户管理
  16. 快速索引 (对View的自定义)
  17. 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
  18. 新年Flag,零基础程序媛编程学习计划(持续更新ing)~~
  19. 【Tomcat】上线部署tomcat。常用命令
  20. POJ--1797 Heavy Transportation (最短路)

热门文章

  1. [NACOS HTTP-GET] The maximum number of tolerable server reconnection errors has been reached
  2. SQL 数字转为中文大写
  3. 【实用工具】使用Java封装可执行exe应用全过程
  4. POJ 1651 Mulitiplication Puzzle
  5. POJ 1949 Chores
  6. Dubbo一致性哈希负载均衡的源码和Bug,了解一下?
  7. markdownPad在win10下渲染报错问题
  8. elasticsearch节点请求流程
  9. 2.成产出现 max(vachar2)取值问题
  10. 8种创建Java线程的方式,你知道几个?