Go语言中闭包是引用了自由变量的函数,被引用的自由变量和函数一同存在,即使已经离开了自由变量的环境也不会被释放或者删除,在闭包中可以继续使用这个自由变量,因此,简单的说:
<strong>函数 + 引用环境 = 闭包 </strong>
同一个函数与不同引用环境组合,可以形成不同的实例,如下图所示:
一个函数类型就像结构体一样,可以被实例化,函数本身不存储任何信息,只有与引用环境结合后形成的闭包才具有“记忆性”,函数是编译期静态的概念,而闭包是运行期动态的概念。
案例:
package main import "fmt" func main() { // 准备一个字符串 str := "hello world" // 创建一个匿名函数 foo := func() { // 匿名函数中访问str str = "hello Go" fmt.Println(str) } // 调用匿名函数 foo() }
输出:
hello Go
针对闭包的其他应用场景,后边实践后再做笔记。
参考文章: Go语言闭包(Closure)—引用了外部变量的匿名函数 http://c.biancheng.net/view/59.html
转载请注明:21运维 » Go语言基础–闭包(Closure)