Defer usage clarification

前端 未结 2 1970
独厮守ぢ
独厮守ぢ 2020-12-07 04:48

Let\'s assume I have the following function

func printNumbers(){
 var x int

 defer fmt.Println(x)

 for i := 0; i < 5; i++{
  x++
 }
}

2条回答
  •  广开言路
    2020-12-07 05:01

    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

提交回复
热议问题