Go-闭包

发布时间 2023-06-24 12:09:21作者: 图兜

1、介绍:

  闭包就是一个函数和与其相关的引用环境组合的一个整体(实体)

2、演示:

//累加器
func AddUpper() func(int)int{
    var n int=10
    return func(x int )int{
        n=n+x
        return n
    }
}
func main(){    
    f:=AddUpper()      //f的数据类型为func(int)int
    fmt.Printf(f(1))    //11 
    fmt.Printf(f(2))    //13
    fmt.Printf(f(3))    //16
} 

3、解释:

  1)AddUpper是一个函数,返回值类型时func(int)int

  2)构成闭包的代码如下:

    var n int=10
    return func(x int )int{
        n=n+x
        return n
    }

  返回值是一个匿名函数,但这个匿名函数引用了函数外的n,因此这个匿名函数和n形成了一个整体,构成闭包

  3)可以这样理解:闭包是类,函数是操作,n是字段。  函数和它使用到的n构成闭包

  4)当反复调用f函数时,因为n是初始化一次,因此每调用一次就进行累计

    n变量在AddUpper调用时初始化一次,只调用了一次(即执行f :=AddUpper()时调用了一次),后续再次调用f函数,所使用到的n均来自上次调用的返回值

  5)闭包的关键:分析出返回的函数引用了哪些变量。