Go Defer
-
如果函数里面有多条defer指令,他们的执行顺序是反序,即后定义的defer先执行。
-
defer函数的参数在defer语句出现的位置计算,不是在defer函数运行的时刻计算。
package main import "log" func foo(n int) int { log.Println("n1=", n) defer log.Println("n=", n) n += 100 log.Println("n2=", n) return n } func main() { var i int = 100 foo(i) }
其运行结果是:
2017/09/30 19:25:10 n1=100 2017/09/30 19:25:10 n2= 200 2017/09/30 19:25:10 n= 100
-
修改
package main import "log" import _ "time" func foo(n int) int { log.Println("n1=", n) defer func() { n += 100 log.Println("n=", n) }() n += 100 log.Println("n2=", n) return n } func main() { var i int = 100 foo(i) }
其运行结果是:
2017/09/30 19:30:58 n1= 100 2017/09/30 19:30:58 n2= 200 2017/09/30 19:30:58 n= 300
-
网友评论