golang defer操作理解

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())
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章