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延迟函数还会执行吗?
立即学习“go语言免费学习笔记(深入)”;
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什么时候执行的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号