GO语言defer

65 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路 defer语句,一个栈,按照写defer的顺序相反的顺序执行。

defer fmt.Println("hello one")
defer fmt.Println("hello two")
//在执行defer语句时,先执行第二个defer语句,再执行第二个defer语句。

注意:在使用defer语句时,声明defer后,函数及所穿的参数不会改变,即已经压入到栈中,不会因为后序的代码更改形参,而改变参数值。
例:

var num=1
defer fmt.Println(num)
num++
//虽然defer语句是在函数执行到最后,才执行,但是,声明defer后,形参变量也被压入到栈中,不会因为num++改变而改变