闭包
闭包对闭包外的环境引入是直接引用,编译器监测到闭包,会将闭包饮用的外部变量分配到堆上
package main
func fa(a int) func(i int) int {
return func(i int) int {
fmt.println(&a)
a = a + i
return a
}
}
func main() {
f := fa(1) //此时f和g引用的闭包环境中的a不是同一个,而是函数调用产生的副本
println(f(1)) // 1
println(f(1)) // 2 多次调用f引用的a是同一个a
}
0xc00000a0d0
2
0xc00000a0d0
3