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