golang defer什么时候执行


本文摘自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")

}

执行结果如下:

1

2

3

test1

test3

defer test2

很清楚地看到,有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反射机制

go - 基于 gorm 获取当前请求所执行的 sql 信息

游戏服务器框架gonet

go+python双语言混合开发

golang怎么定时任务

你还在手撕微服务?快试试 go-zero 的微服务自动生成

golang核心编程

一文讲解golang怎么实现反转链表

手撸golang 基本数据结构与算法 栈

[golang]从sync.waitgroup看内存对齐

更多相关阅读请进入《golang》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...