大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
在golang当中,defer代码块会在函数调用链表中增加一个函数调用。这个函数调用不是普通的函数调用,而是会在函数正常返回,也就是return之后添加一个函数调用。因此,defer通常用来释放函数内部变量。
为白沙黎族等地区用户提供了全套网页设计制作服务,及白沙黎族网站建设行业解决方案。主营业务为做网站、成都网站设计、白沙黎族网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
通过defer,我们可以在代码中优雅的关闭/清理代码中所使用的变量。defer作为golang清理变量的特性,有其独有且明确的行为。
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什么时候执行的详细内容,更多请关注创新互联其它相关文章!