博客再次改版了,这次在细节方面做了一些调整。
golang defer在什么时候执行
时间:2019-12-18 10:31:00 +0800 CST 浏览:346

摘要

详解golang中defer和return的执行顺序

注意

return后并不等于func退出

多个defer的执行顺序是后进先出

golang中,func支持多返回值,当return执行时会将各个返回值压入栈中,最后再退出func。而defer即在return执行完,func退出前执行。所以defer执行时可修改func返回值(不推荐这么做)。

例子

package main

import "fmt"

func test() (num int) {
    defer func() {
        fmt.Println("defer...")
        num++
    }()
    num = 10
    return
}

func test1() int {
    num := 10
    defer func() {
        fmt.Println("defer...")
        num++
    }()
    return num
}

func main() {
    fmt.Println(test())
    fmt.Println(test1())
}


defer...
11
defer...
10


如果这篇文章对你有所帮助,可以通过下边的“打赏”功能进行小额的打赏。

本网站部分内容来源于互联网,如有侵犯版权请来信告知,我们将立即处理。


来说两句吧