知道js闭包的肯定能非常快速的了解go的闭包,非常类似
闭包的概念:是在其语法上下文中引用了自由变量的函数(太官方)
先解释下作用域:每个变量都有自己的作用域,如果找不到需要的变量则会继续向上查,直到找到为止,遇到的问题就是内部的能访问外包的变量,但是外层无法访问内层的变量,如何能实现外层访问内层的变量,则就是闭包。
package main
import (
"fmt"
)
func main() {
f := test(20)
f()
}
func test(x int) func() {
fmt.Println(x)
return func() {
fmt.Println(x)
}
}
实现原理:闭包引用了原环境变量的指针(可以不理解)