在GO和局部变量中关闭

这个问题在这里已经有了答案:

  • '封'和'lambda'有什么区别? 10个答案

  • 引用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

    上一篇: Closure in GO and local variables

    下一篇: Why is Java Lambda also called Closures