【发布时间】:2016-03-22 10:46:03
【问题描述】:
查看测试代码:
package main
import "fmt"
func main() {
i := 10
closure1 := func() {
fmt.Printf("closure, i: %d\n", i)
i = 15
}
closure1()
fmt.Printf("in main, i: %d\n", i)
closure2 := func(x int) {
fmt.Printf("function call, pass parameter, i: %d\n", x)
}
i = 20
closure1()
closure2(i)
}
我觉得closure2的输出应该是20,但实际结果是15,不知道为什么??? 任何人都可以帮助我,请在我的代码中查看我的评论,在此先感谢。
【问题讨论】:
-
i在closure1的末尾分配了15,您在调用closure2之前调用它。所以你将 15 传递给closure2 -
我明白了,golang 闭包捕获了对 i 的引用,而不是快照值,我明白了,再次非常感谢。
标签: function go closures anonymous