Let\'s assume I have the following function
func printNumbers(){
var x int
defer fmt.Println(x)
for i := 0; i < 5; i++{
x++
}
}
If the defer has arguments they are evaluated at the line of the defer-statement; this is illustrated in the following snippet, where the defer will print 0:
func printNumber() {
i := 0
defer fmt.Println(i) // will print 0
i++
return
}
You can use an anonymous function as a defer statement if you want to postpone the execution of a statement or a function until the end of the enclosing (calling) function. Here is an updated example:
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