Go语言基础–闭包(Closure) – 21运维
通知: .-...

Go语言基础–闭包(Closure)

GO 21运维 527浏览

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)