关于golang的defer的练习
golang的defer怎么说。大意就是在函数return后。函数关闭前。按照filo的顺序来执行的关键字
上代码:
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: 0
2
函数a()的返回:
0
函数b()的返回:
4 3 2 1 0
函数d()的返回:
sdad
1
然后为了弄清楚到底是return前还是return后执行的。
package main import ( "fmt" ) func main() { test() } func test() (int, error) { defer fmt.Println("defer") return fmt.Println("return") }
输出的是:
return defer
豁然开朗。。就是return后执行的