GO学习笔记:函数Panic和Recover
Go没有像Java那样的异常机制,它不能抛出异常,而是使用了panic和recover机制。一定要记住,你应当把它作为最后的手段来使用,也就是说,你的代码中应当没有,或者很少有panic的东西。这是个强大的工具,请明智地使用它。那么,我们应该如何使用它呢?
Panic
是一个内建函数,可以中断原有的控制流程,进入一个令人恐慌的流程中。当函数F调用panic,函数F的执行被中断,但是F中的延迟函数会正常执行,然后F返回到调用它的地方。在调用的地方,F的行为就像调用了panic。这一过程继续向上,直到发生panic的goroutine中所有调用的函数返回,此时程序退出。恐慌可以直接调用panic产生。也可以由运行时错误产生,例如访问越界的数组。
Recover
是一个内建的函数,可以让进入令人恐慌的流程中的goroutine恢复过来。recover仅在延迟函数中有效。在正常的执行过程中,调用recover会返回nil,并且没有其它任何效果。如果当前的goroutine陷入恐慌,调用recover可以捕获到panic的输入值,并且恢复正常的执行。
下面这个函数演示了如何在过程中使用panic
var user = os.Getenv("USER")
func init() {
if user == "" {
panic("no value for $USER")
}
}
下面这个函数检查作为其参数的函数在执行时是否会产生panic:
func throwsPanic(f func()) (b bool) {
defer func() {
if x := recover(); x != nil {
b = true
}
}()
f() //执行函数f,如果f中出现了panic,那么就可以恢复回来
return
}
(编辑:雷林鹏 来源:网络)
最新文章
- vcredist_x64.exe vcredist_x86.exe 静默安装方法收集
- c# 动态调用WCF方法笔记!
- Qt 程序打包发布
- Maven 入门 (1)—— 安装
- bigdecimal 保留小数位
- 在Xcode中想要清屏该怎么实现
- 实例详解 DB2 排序监控和调优
- 网络编程:socket--python核心编程(3),chapter 1
- BASE64,MD5,SHA,HMAC加密與解密算法(java)
- Delphi richedit获取选中文字
- php 加密解密方法2
- GitHub好站点
- DataReader To List
- scrapy之五大核心组件
- Scanner 类的使用
- Database学习 - mysql数据类型约束
- print 与标准输出
- 底层代码创建GUI
- 理解JS中的this的指向
- Windows 10原版ISO下载地址(持续更新)