go中的关键字-defer
1. defer的使用 defer 延迟调用。我们先来看一下,有defer关键字的代码执行顺序: 1 func main() { 2 defer func() { 3 fmt.Println("1号输出") 4 }() 5 defer func() { 6 fmt.Println("2号输出") 7 }() 8 } 输出结果: 1 2号出来 2 1号出来 结论:多个defer的执行顺序是倒序执行(同入栈先进后出)。 由例子可以看出来,defer有延迟生效的作用,先使用defer的语句延迟到最后执行。 1.1 defer与返回值之间的顺序 1 func defertest() int 2 3 func main() { 4 fmt.Println("main:", defertest()) 5 } 6 7 func defertest() int { 8 var i int 9 defer func() { 10 i++ 11 fmt.Println("defer2的值:", i) 12 }() 13 defer func() { 14 i++ 15 fmt.Println("defer1的值:", i) 16 }() 17 return i 18 } 输出结果: 1 defer1的值: 1 2 defer2的值: 2 3 main: 0 结论