golang defer什么时候执行

互联网 19-12-3

Golang有一个特殊的控件语句,那就是defer,defer语句用于延迟调用指定的函数,比如释放资源等,它会在函数最后执行,但在return之前,先让我们看代码简单了解下: (推荐学习:go)

package main  func main() {     test() }func test() {     println("test1")    defer func() {         println("defer test2")     }()     println("test3") }

执行结果如下:

test1 test3 defer test2

很清楚地看到,有defer那个函数最后才执行的

现在改一下代码,让代码panic,当抛出异常时,defer延迟函数还会执行吗?

package main  func main() {     test() }func test() {      println("test1")         panic("panic")    defer func() {         println("defer test2")     }()          println("test3") }

输出

test1 panic: panic Process finished with exit code 2

延迟函数居然没有执行,为什么会这样呢?是因为panic在延迟函数之前了,再改一下代码如下

package main  func main() {     test() }func test() {      println("test1")    defer func() {         println("defer test2")     }()     panic("panic")     println("test3") }

输出

test1 defer test2 panic: panic

延迟函数执行了,可以看到panic在延迟函数之前延迟函数是执行不了的,毕竟抛出异常。

以上就是golang defer什么时候执行的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: golang
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:golang context用来干吗

相关资讯