go的defer用法
阿新 • • 發佈:2022-03-06
注意:testdefer3() defer 與testdefer4() defer匿名函式 的區別,這是易錯點
點選檢視程式碼
package main import ( "fmt" ) // defer在函式返回的時候執行,多用於資源釋放(開啟檔案,開啟資料庫連線,函式返回之後,關閉連線) func testdefer1() { defer fmt.Println("hello defer") defer fmt.Println("hello defer V2") defer fmt.Println("hello defer V3") // 多個defer執行順序是後進先出的棧列 fmt.Println("aaaaaaaaaaaa") fmt.Println("bbbbbbbbbbbb") } func testdefer2() { for i := 0; i < 5; i++ { defer fmt.Printf("i=%d\n", i) } // 列印順序 4,3,2,1,0 fmt.Println("running ") fmt.Println("return") } func testdefer3() { var i int = 0 defer fmt.Printf("testdefer3 defer i=%d\n", i) // 在i=0時,已經寫入defer中了 i = 1000 fmt.Printf("testdefer3 i=%d \n", i) } func testdefer4() { var i int = 0 defer func(){ fmt.Printf("testdefer4 defer i=%d\n", i) // 在i=0時,已經寫入defer中了 }() i = 1000 fmt.Printf("testdefer4 i=%d \n", i) } func main() { //testdefer1() //testdefer2() testdefer3() testdefer4() }
testdefer3() testdefer4()輸出:
點選檢視程式碼
testdefer3 i=1000
testdefer3 defer i=0
testdefer4 i=1000
testdefer4 defer i=1000