defer:

延迟到ret之前,通常用于IO的关闭 or 错误处理。
在延迟出现的异常可以被后面的捕捉,但是只有最后一个。
defer可以多次,这样形成一个defer栈,后defer的语句在函数返回时将先被调用

func f() (result int) {deferfunc(){result++}()return 0}func test() error {f, err := os.Create("test.txt")if err != nil { return err }defer f.Close() // 注册调⽤用,⽽而不是注册函数。必须提供参数,哪怕为空。f.WriteString("Hello, World!")return nil
}

panic:

函数执行的时候panic了,函数不往下走了,运行时并不是立刻向上传递panic,而是到defer那,等defer的东西都跑完了,panic再向上传递。

func panic(v interface{})
func recover() interface{}defer recover()  //无法捕捉

所以可以在defer中用recover进行抓捕。
而且recover必需在延迟调用内才行。


参考:

http://www.cnblogs.com/ghj1976/archive/2013/02/11/2910114.html
https://github.com/qyuhen/book

转载于:https://www.cnblogs.com/Przz/p/6816531.html

Go学习——defer、panic相关推荐

  1. Go的异常处理 defer, panic, recover

    Go的异常处理 defer, panic, recover 参考文章: (1)Go的异常处理 defer, panic, recover (2)https://www.cnblogs.com/ghj1 ...

  2. go defer,panic,recover详解 go 的异常处理

    golang中defer,panic,recover是很常用的三个特性,三者一起使用可以充当其他语言中try-catch-的角色,而defer本身又像其他语言的析构函数 defer defer后边会接 ...

  3. Go案例说明defer panic recover

    defer推迟  recover恢复  panic恐慌 通过一个案例解释:发送邮件的 发送不成功要修改数据表的邮件发送状态值 发送邮件的内部sendEmail出现错误  要去修改数据表的状态值了 发送 ...

  4. Go-关键字defer、panic、recover详解

    目录 defer 调用时机 多次调用时的执行顺序 传参问题 源代码 panic 执行defer 跨协程问题 源代码 recover 使用 源代码 总结 defer panic recover 全部源代 ...

  5. Go 学习笔记(19)— 函数(05)[如何触发 panic、触发 panic 延迟执行、panic 和 recover 的关系]

    1. 异常设计思想 Go 语言的错误处理思想及设计包含以下特征: 一个可能造成错误的函数,需要返回值中返回一个错误接口( error ),如果调用是成功的,错误接口将返回 nil ,否则返回错误. 在 ...

  6. go 异常捕获处理 panic defer recover

    简言 在其他语言里,宕机往往以异常的形式存在,底层抛出异常,上层逻辑通过 try/catch 机制捕获异常,没有被捕获的严重异常会导致宕机 go语言追求简洁,优雅,Go语言不支持传统的 try-cat ...

  7. golang go语言_在7小时内学习快速简单的Go编程语言(Golang)

    golang go语言 The Go programming language (also called Golang) was developed by Google to improve prog ...

  8. golang return要返回的参数太多_Golang中的Defer必掌握的7知识点

    在用Golang开发的时候,defer这个语法也是必备的知识,但是我们除了知道他是在一个函数退出之前执行,对于defer是否还有其他地方需要注意的呢.本文整理的defer的全场景使用情况,部分场景源自 ...

  9. Go实战--golang中defer的使用

    原址 生命不止,继续 go go go !!! 学习golang这么久了,还没看到类似传统的 try-catch-finally 这种异常捕捉方式.  但是,Go中引入的Exception处理:def ...

最新文章

  1. 2021年大数据常用语言Scala(七):基础语法学习 条件表达式
  2. java查找和替换_java敏感字查找和替换
  3. java中的Cookie是什么_第74节:Java中的Cookie和Session
  4. python批量复制文件问题,python 批量复制不同目录下的文件
  5. java 位运算_java学习之运算符与表达式(四)
  6. 谁拿了最多奖学金(洛谷-P1051)
  7. asmcmd:Connected to an idle instance.
  8. Jquery的知识图谱
  9. 程序员为什么 365 天背电脑包?这答案我服!
  10. FragmentActivity+FragmentTabHost+Fragement替代TabActibvity+TabHost+Activity
  11. 10分钟搞定webpack打包
  12. Inceptor如何访问本地文件
  13. 华为手机热点无法连接_华为手机开热点,连不上怎么破
  14. CAD制图初学入门:CAD图案填充之图案加洞
  15. xposed框架_把安卓手机开发到极致的框架xposed
  16. BP神经网络综合评价法
  17. js前端缓存的几种方法
  18. 基于Salt Event系统构建Master端returner
  19. 配置与管理Ubuntu 21.10
  20. Git 术语及中英文对照

热门文章

  1. python中utf8占几个字节_为什么utf8占用3个字节
  2. 找不到jar包的解决方法
  3. python进制转换内置函数_python数学运算、逻辑运算和进制转化相关的 内置函数...
  4. 实现JavaSrcipt页面的跳转
  5. linux 安装node出现 libstdc++.so.6: wrong ELF class
  6. 设备自动获取ip DHCP模型 IP为169.254.4.193
  7. oracle refresh force,千万级表上的物化视图(force模式 ),手动刷新,为何速度奇慢?...
  8. 湖大和厦大计算机专硕6,【图片】一战厦大计算机上岸,经验帖。慢更【考研吧】_百度贴吧...
  9. hibernate mysql 模糊查询_服务器-hibernate操作mysql,模糊查询时中文查不到,数字和英文可以查到...
  10. oracle查询游标行数,如何查找Oracle PL/SQL游标中的记录数量?