详解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
如果这篇文章对你有所帮助,可以通过下边的“打赏”功能进行小额的打赏。
本网站部分内容来源于互联网,如有侵犯版权请来信告知,我们将立即处理。