1. 基本介绍
闭包就是一个函数和与其相关的引用环境组合的一个整体(实体)
2. 案例演示
package main
import (
"fmt"
)
// 累加器
func AddUpper() func (int) int {
var n int = 10
return func (x int) int {
n = n + x
return n
}
}
func main() {
// 使用前面的代码
f := AddUpper()
fmt.Println(f(1)) // 11
fmt.Println(f(2)) // 13
fmt.Println(f(3)) // 16
}
对上面代码的说明和总结:
1)AddUpper是一个函数,返回的数据类型是func(int) int
2)闭包的说明
3)大家可以这样理解:闭包是类,函数是操作,n是字段。函数和它使用到的n构成闭包
4)当我们反复的调用f函数时,因为 n 只初始化一次,因此每调用一次就进行累计。
5)我们要搞清楚闭包的关键,就是要分析出返回的函数它使用(引用)到哪些变量,因为函数和它引用到的变量共同构成闭包。
6)对上面代码的一个修改,加深对闭包的理解
package main
import (
"fmt"
)
// 累加器
func AddUpper() func(int) int{
var n int = 10
var str = "hello"
return func(x int) int {
n = n + x
str += string(36) // => 36 => '$'
fmt.Println("str=",str)
return n
}
}
func main() {
f := AddUpper()
fmt.Println(f(1))
fmt.Println(f(2))
fmt.Println(f(3))
fmt.Println(f(4))
}