NIUCLOUD是一款SaaS管理后台框架多应用插件+云编译。上千名开发者、服务商正在积极拥抱开发者生态。欢迎开发者们免费入驻。一起助力发展! 广告
### 概述 所谓闭包就是一个函数"捕获了和它在同一作用域的其他常量和变量. 这就意味着当闭包被调用的时候,不 管在程序说明地方调用,闭包能够使用这些常量或者变量. 它不关心这些捕获了的变量或者常量是否已经 超出了作用域,所以只有闭包还在使用它,这些变量就还会存在. 在go语言中,所有的匿名函数(go语言规范中称之为函数字面量)都是闭包,匿名函数是指不需要定义函数名 的一种函数实现方式,它并不是一个新概念,最早可以回溯到1958年的Lisp语言 . go语言匿名函数也可以使 用函数类型 . ### 使用方法 #### 第一种 ~~~ func main() { num := 10 f1 := func() { fmt.Println(num) num ++ num := 100 //不要写成"="号,否者就改变了外部变量值,这里是重新声明了一个新的变量,只不过变量名是相同的,但是作用域是不同的 fmt.Println(num) } f1() f1() fmt.Println(num) } ~~~ ~~~ 10 100 11 100 12 ~~~ #### 第二种 函数类型 ~~~ func main() { type call func() f1 := func() { fmt.Println("hello") } var f2 call f2 = f1 f2() } ~~~ ~~~ hello ~~~ #### 第三种 ~~~ func(a int) { fmt.Println(a) //定义并直接调用 }(10) ~~~ #### 第四种 ~~~ func main() { f := show() fmt.Println(f()) fmt.Println(f()) } func show() func() int { x := 0 return func() int { x++ return x * x } } ~~~