在godoc(https://blog.golang.org/defer-panic-and-recover),有一個例子:如何理解go語言中的`defer`?
- 遞延功能可以讀取和分配給返回函數的命名返回值。
在此示例中,延遲函數在周圍函數返回後遞增返回值i 。因此,該函數返回2:
func c() (i int) {
defer func() { i++ }()
return i
}
我也寫了一個小編程':
package main
import "fmt"
func b() int {
i := 0
for ; i < 4; i++ {
defer func() {fmt.Println(i); i++}()
}
return i
}
func main() {
fmt.Println("result = ", b())
}
輸出爲:
4
5
6
7
result = 4
所以我很困惑,爲什麼第二示例不輸出8
?
退房,可能會有幫助:HTTPS: //blog.learngoprogramming。COM/golang-延遲簡化的-77d3b2b817ff –