假设我有以下功能
func printNumbers(){ var x int defer fmt.Println(x) for i := 0; i < 5; i++{ x++ } }
如规范中所述:
每次执行“ defer”语句时,将照常评估调用的函数值和参数并重新保存,但不会调用实际函数。
显然,函数执行结束时将输出零。但是,如果我想打印出变量的最终值该x怎么办?
x
我提出了以下解决方案:
func printNumbers(){ var x int printVal := func(){ fmt.Println(x) } defer printVal() for i := 0; i < 5; i++{ x++ } }
所以我想知道是否有更好的方法来解决此问题。
如果defer有参数,则在defer语句的行对其进行评估;以下代码段对此进行了说明,其中defer将显示0:
func printNumber() { i := 0 defer fmt.Println(i) // will print 0 i++ return }
如果要将语句或函数的执行推迟到封闭(调用)函数结束之前,可以将匿名函数用作延迟语句。这是一个更新的示例:
func printNumbers() { x := 0 defer func() { fmt.Println(x) }() for i:=0; i < 5; i++ { x++; } return }
http://play.golang.org/p/YQGQ_8a0_9