Golang从入门到精通(二十二):Golang错误处理之defer
来源:互联网 发布:学士后java什么意思 编辑:程序博客网 时间:2024/05/16 07:34
Golang引入关键字defer来延迟执行defer后面的函数。一直等到包含defer语句的函数执行完毕时,延迟函数(defer后的函数)才会被执行,而不管包含defer语句的函数是通过return的正常结束,还是由于panic导致的异常结束。你可以在一个函数中执行多条defer语句,它们的执行顺序与声明顺序相反。
defer简介
在Go语言中,可以使用关键字defer向函数注册退出调用,即主调函数退出时,defer后的函数才会被调用。
defer语句的作用是不管程序是否出现异常,均在函数退出时自动执行相关代码(相当于Java中的finally)。当函数执行到最后时,这些defer语句会按照逆序执行,最后该函数返回。
在处理异常时候这个特点很有用处:有defer关键字之后,即便函数抛出了异常,也会被执行,这样就不会因程序出现了错误而导致资源不会释放了。
我们来看一下defer最简单的使用:
package mainimport ( "fmt")func main() { for i := 0; i < 5; i++ { defer fmt.Printf("%d ",i) }}
输出是:4 3 2 1 0
。
执行 recover
被 defer 的函数在 return 之后执行,这个时机点正好可以捕获函数抛出的 panic,因而 defer 的另一个重要用途就是执行 recover。
recover 只有在 defer 中使用才更有意义,如果在其他地方使用,由于程序已经调用结束而提前返回而无法有效捕捉错误。
package mainimport ( "fmt")func main() { defer func() { if ok := recover(); ok != nil { fmt.Println("recover") } }() panic("error")}
阅读全文
0 0
- Golang从入门到精通(二十二):Golang错误处理之defer
- Golang从入门到精通(二十):Golang错误处理之error
- Golang从入门到精通(二十一):Golang错误处理之panic-recover
- Golang从入门到精通(十二):Golang复合数据之slice
- Golang从入门到精通(一):Golang介绍
- Golang从入门到精通(三):Golang数据类型
- Golang从入门到精通(八):Golang数组
- Golang从入门到精通(九):Golang字符串
- Golang从入门到精通(十):Golang函数
- Golang从入门到精通(十一):Golang方法
- Golang从入门到精通(十四):Golang结构体
- Golang从入门到精通(十五):Golang指针
- Golang从入门到精通(十六):Golang接口
- Golang从入门到精通(十七):Golang反射
- Golang从入门到精通(二):Golang开发环境配置
- Golang从入门到精通(五):Golang控制语句之if/else
- Golang从入门到精通(六):Golang控制语句之for
- Golang从入门到精通(七):Golang控制语句之switch
- 曾国藩六戒—送给自己的未来人生
- 【杂谈opencv】OpenCV中的KeyPoint与DMatch
- 软件测试基本概念(1)定义和分类
- 看懂Oracle License 许可机制【转】
- LINUX双网卡绑定设置。
- Golang从入门到精通(二十二):Golang错误处理之defer
- hadoop伪分布式搭建
- 利用JQUERY实现多个AJAX请求等待
- restful+ci框架 实践
- Java 8 Optional类深度解析
- [绍棠_Swift] xcodeDefault.xctoolchain/user/bin/swiftcfailed with exit code 1
- smb(ms17-010)远程命令执行之msf
- Django2.0 path
- Gradle error : Write access is allowed from event dispatch thread only in android studio