go 闭包
闭包 = 函数 + 其引用的外部变量环境。
当一个函数内部定义了一个匿名函数,并且这个匿名函数引用了外部函数的局部变量,那么这个匿名函数就叫闭包,它“闭合”了这些变量。
Go 的闭包在编译时被转换成一个匿名结构体实例,该结构体包含了需要捕获的外部变量指针。函数本体变成这个结构体的方法,调用时传递该结构体作为接收者。
type closure_data struct {count *int } func (c *closure_data) invoke() int {(*c.count)++return *c.count }
因此闭包函数本质上是一个带有数据上下文的方法,这也是为什么它能修改外部变量的原因。
