golang的defer怎麼說。大意就是在函數return後。函數關閉前。按照filo的順序來執行的關鍵字golang
上代碼:函數
package main import ( "fmt" ) func main() { // a() fmt.Println(c()) // b() // fmt.Println(d()) } func c() (i int) { defer func() { i++ }() defer fmt.Println("this:", i) return 1 } func a() { i := 0 defer fmt.Println(i) i = i + 1 } func b() { var whatever [5]struct{} for i := range whatever { // defer func() { fmt.Println(i) }() defer func(n int) { fmt.Println(n) }(i) } } func d() (i int) { defer fmt.Println("sdad") return 1 }
函數c() 的返回:this
this: 0
2
函數a()的返回:spa
0
函數b()的返回:code
4 3 2 1 0
函數d()的返回:blog
sdad
1
而後爲了弄清楚究竟是return前仍是return後執行的。class
package main import ( "fmt" ) func main() { test() } func test() (int, error) { defer fmt.Println("defer") return fmt.Println("return") }
輸出的是:test
return defer
豁然開朗。。就是return後執行的import