golang defer什么时候执行
16lz
2021-01-22
Golang有一个特殊的控件语句,那就是defer,defer语句用于延迟调用指定的函数,比如释放资源等,它会在函数最后执行,但在return之前,先让我们看代码简单了解下: (推荐学习:go)
package mainfunc main() { test()}func test() { println("test1") defer func() { println("defer test2") }() println("test3")}
执行结果如下:
test1test3defer test2
很清楚地看到,有defer那个函数最后才执行的
现在改一下代码,让代码panic,当抛出异常时,defer延迟函数还会执行吗?
package mainfunc main() { test()}func test() { println("test1") panic("panic") defer func() { println("defer test2") }() println("test3")}
输出
test1panic: panicProcess finished with exit code 2
延迟函数居然没有执行,为什么会这样呢?是因为panic在延迟函数之前了,再改一下代码如下
package mainfunc main() { test()}func test() { println("test1") defer func() { println("defer test2") }() panic("panic") println("test3")}
输出
test1defer test2panic: panic
延迟函数执行了,可以看到panic在延迟函数之前延迟函数是执行不了的,毕竟抛出异常。
更多相关文章
- go语言的init函数详解
- go语言中的包引入、函数、变量使用
- go语言函数介绍
- golang不可重入函数实现
- golang的函数怎么写
- golang代码能不能加密
- golang 怎么调用c代码
- 从go语言闭包谈函数式编程
- go语言中函数与方法介绍