当前位置: 首页 > news >正文

go 闭包

go 闭包

闭包 = 函数 + 其引用的外部变量环境。
当一个函数内部定义了一个匿名函数,并且这个匿名函数引用了外部函数的局部变量,那么这个匿名函数就叫闭包,它“闭合”了这些变量。

 

Go 的闭包在编译时被转换成一个匿名结构体实例,该结构体包含了需要捕获的外部变量指针。函数本体变成这个结构体的方法,调用时传递该结构体作为接收者。

type closure_data struct {count *int
}
func (c *closure_data) invoke() int {(*c.count)++return *c.count
}

因此闭包函数本质上是一个带有数据上下文的方法,这也是为什么它能修改外部变量的原因。