本文摘自php中文网,作者(*-*)浩,侵删。

Golang有一个特殊的控件语句,那就是defer,defer语句用于延迟调用指定的函数,比如释放资源等,它会在函数最后执行,但在return之前,先让我们看代码简单了解下: (推荐学习:go)
1 2 3 4 5 6 7 8 9 10 | package main
func main() {
test()
}func test() {
println("test1") defer func() {
println("defer test2")
}()
println("test3")
}
|
执行结果如下:
很清楚地看到,有defer那个函数最后才执行的
现在改一下代码,让代码panic,当抛出异常时,defer延迟函数还会执行吗?
1 2 3 4 5 6 7 8 9 10 11 12 13 | package main
func main() {
test()
}func test() {
println("test1")
panic("panic") defer func() {
println("defer test2")
}()
println("test3")
}
|
输出
1 2 3 | test1
panic: panic
Process finished with exit code 2
|
延迟函数居然没有执行,为什么会这样呢?是因为panic在延迟函数之前了,再改一下代码如下
1 2 3 4 5 6 7 8 9 10 11 12 | package main
func main() {
test()
}func test() {
println("test1") defer func() {
println("defer test2")
}()
panic("panic")
println("test3")
}
|
输出
1 2 3 | test1
defer test2
panic: panic
|
延迟函数执行了,可以看到panic在延迟函数之前延迟函数是执行不了的,毕竟抛出异常。
以上就是golang defer什么时候执行的详细内容,更多文章请关注木庄网络博客!!
相关阅读 >>
详解golang cpu的使用设置
golang语言的出现解决了什么问题
golang判断文件或文件夹是否存在
专访go语言布道师dave cheney:go语言这十年,只能用“成功”一词总结
golang闭包有什么用
leetcode 115. 不同的子序列 golang
手撸golang go与微服务 saga模式之7
手撸golang 结构型设计模式 装饰器模式
go语言之错误处理
go语言基础之变量和常量
更多相关阅读请进入《golang》频道 >>
老貘
一个与时俱进的Go编程知识库。
转载请注明出处:木庄网络博客 » golang defer什么时候执行