一个可能遇到的问题

这里并没有说明所有关于defer语句的特性,defer语句有余下的性质。
1.A deferred function’s arguments are evaluated when the defer statement is evaluated.
2.Deferred function calls are executed in Last In First Out order after the surrounding function returns.
3.Deferred functions may read and assign to the returning function’s named return values.
所以下面的代码执行结果是0,而不是1.(根据上面的第一点)

func a() {
    i := 0
    defer fmt.Println(i) //evaluated arg i
    i++
    return
}
讨论数量: 1
func b() {
    defer un(trace("b"))
    fmt.Println("in b")
    a()
}

其中这一句defer un(trace("b"))就说明了你上述中的第1点了。

9个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!