Baham's Blog

Above all else, guard your heart.

Go语言-defer压后

defer压后的作用是使defer语句在所在函数返回后才执行。 比如:

func f() (result int){
    defer func(){
        result++
    }()
    return 1
}//本段代码来自《Go语言云动力》4.6

最终f将会2,而不是1,因为return 1之后,result++执行

下面可以思考一下,这段代码:

for i:=0;i<=3;i++{
    defer fmt.Print(i)
}

事实上,将会打印3 2 1 0

//defer执行时,会对函数参数立即求值,但不会立即调用。在所在函数执行完成后,defer会按照后进先出原则调用执行。




The Original Link: http://baham.github.io/12_05_goyu-yan-deferya-hou.html
If you want to reprint it, please do under the CC BY-NC-SA 4.0

Comments