【Go】defer
defer的执行顺序(执行到defer关键字时,将该行代码压栈,方法执行结束后,逐个弹栈并执行方法)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17// 1.defer的执行顺序
func func1() {
fmt.Println("func1 ...")
}
func func2() {
fmt.Println("func2 ...")
}
func func3() {
fmt.Println("func3 ...")
}
func main() {
// 测试defer执行顺序
defer func1()
defer func2()
defer func3()
}结果
defer和return谁先谁后
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17// 2. defer和return的先后顺序
func deferFunc() {
fmt.Println("deferFunc ...")
}
func returnFunc() int {
fmt.Println("returnFunc ...")
return 0
}
func testDeferAndReturn() int {
defer deferFunc()
return returnFunc()
}
func main() {
// 测试defer和return的执行顺序
testDeferAndReturn()
}结果