在GO和局部变量中关闭
这个问题在这里已经有了答案:
引用Go语言规范:
函数文字
函数文字表示一个匿名函数。
FunctionLit = "func" Function .
func(a, b int, z float64) bool { return a*b < int(z) }
函数文字可以分配给变量或直接调用。
f := func(x, y int) int { return x + y }
func(ch chan int) { ch <- ACK }(replyChan)
函数文字是闭包:它们可能引用周围函数中定义的变量。 这些变量然后在周围的函数和函数文字之间共享,并且只要它们是可访问的,它们就存活。
所以是的,在Go中,闭包保证能够访问定义函数文本的范围中可见的任何变量。 Go编译器可以识别范围内的“捕获”变量,并强制它们到堆而不是定义上下文堆栈(如果有的话 - 也可以有TLD [顶层声明]关闭)。
链接地址: http://www.djcxy.com/p/51273.html