package main
import "fmt"
func test1() (x int) {
//x只是返回值定義爲int類型沒有賦值 這個輸出取的 int 類型默認值
defer fmt.Printf("in test1 defer: x = %d\n", x)
x = 1
return 6
}
func test2() (x int) {
x = 2
//x賦值爲2 所以打印爲2
defer fmt.Printf("in test2 defer: x = %d\n", x)
return 6
}
func test3() (x int) {
//x先賦值爲3 後面return爲6 相當於重新賦值x爲6 defer函數 先運行本身函數後再執行defer函數
defer func() {
fmt.Printf("in test3 defer: x = %d\n", x)
}()
x = 3
return 6
}
func test4() (x int) {
//x賦值爲4 後面return爲6 相當於重新賦值x爲6 defer函數 先運行本身函數後再執行defer函數
//傳參x x爲int默認值 所以n打印爲0
defer func(n int) {
fmt.Printf("in test4 defer x as parameter: x = %d\n", n)
fmt.Printf("in test4 defer x after return: x = %d\n", x)
}(x)
x = 4
return 6
}
func main() {
//所有方法返回都爲 6
fmt.Printf("in main test1 return: x = %d\n", test1())
fmt.Printf("in main test2 return: x = %d\n", test2())
fmt.Printf("in main test3 return: x = %d\n", test3())
fmt.Printf("in main test4 return: x = %d\n", test4())
}