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

  }

  (编辑:雷林鹏 来源:网络)

最新文章

  1. vcredist_x64.exe vcredist_x86.exe 静默安装方法收集
  2. c# 动态调用WCF方法笔记!
  3. Qt 程序打包发布
  4. Maven 入门 (1)—— 安装
  5. bigdecimal 保留小数位
  6. 在Xcode中想要清屏该怎么实现
  7. 实例详解 DB2 排序监控和调优
  8. 网络编程:socket--python核心编程(3),chapter 1
  9. BASE64,MD5,SHA,HMAC加密與解密算法(java)
  10. Delphi richedit获取选中文字
  11. php 加密解密方法2
  12. GitHub好站点
  13. DataReader To List
  14. scrapy之五大核心组件
  15. Scanner 类的使用
  16. Database学习 - mysql数据类型约束
  17. print 与标准输出
  18. 底层代码创建GUI
  19. 理解JS中的this的指向
  20. Windows 10原版ISO下载地址(持续更新)

热门文章

  1. PHP 防止恶意用户快速刷新页面
  2. python的socket的学习
  3. Redis2.8配置文件详解(转)
  4. Smobiler实现扫描条码和拍照功能(开发日志八)
  5. Linux学习笔记(9)linux网络管理与配置之一——Linux基础网络命令与学习大纲(0)
  6. StrobeMediaPlayback的Javascript桥接
  7. 使用 10046 查看执行计划并读懂 trace 文件
  8. 3 TensorFlow入门之识别手写数字
  9. Ubuntu学习笔记3-图书知识点总结
  10. Java io流详解二