我有一个关于golang延迟的问题:golang延迟语句是在return语句之前还是之后执行?
我已经阅读Defer_statements。但是我没有答案。
我做了一个简单的测试:
func test1() (x int) {
defer fmt.Printf("in defer: x = %d\n", x)
x = 7
return 9
}
func test2() (x int) {
defer func() {
fmt.Printf("in defer: x = %d\n", x)
}()
x = 7
return 9
}
func test3() (x int) {
x = 7
defer fmt.Printf("in defer: x = %d\n", x)
return 9
}
func main() {
fmt.Println("test1")
fmt.Printf("in main: x = %d\n", test1())
fmt.Println("test2")
fmt.Printf("in main: x = %d\n", test2())
fmt.Println("test3")
fmt.Printf("in main: x = %d\n", test3())
}
test1()Printftest2()test3()Printfx = 7
但是结果是:
test1 in defer: x = 0 in main: x = 9 test2 in defer: x = 9 in main: x = 9 test3 in defer: x = 7 in main: x = 9
那么,有谁能解释:1.为什么得到这个结果?为什么test1打印0,test2打印9,test3打印7。2.延迟语句在返回之后还是返回之前执行?
非常感谢。