其中有一个例子:
package main
import (
"fmt"
)
func main() {
i := 1
defer func() {
fmt.Println(test(i))
}()
i = 100
}
func test(i int) int {
i = i + 1
return i
}
复制代码
结果:
D:\workspace\go\src\test>go run main.go
101
复制代码
通过这个例子我们知道,最后运行defer的时候i是100,那如果我们在运行defer的时候就需要i是最初值1来做逻辑呢,那应该怎么办,很简单,把i当作匿名函数的参数。代码如下:
package main
import (
"fmt"
)
func main() {
i := 1
defer func(i int) {
fmt.Println(test(i))
}(i)
i = 100
}
func test(i int) int {
i = i + 1
return i
}
复制代码
结果:
D:\workspace\go\src\test>go run main.go
2
复制代码
defer func(i int) { fmt.Println(test(i)) }(i)