Golang闭包入门了解

概念
闭包就是一个函数与其相关的引用环境组成的一个整体。
闭包本质其实是一个函数,但是这个函数会用到函数外的变量,它们共同组成的整体我们叫做闭包。

简单举例说明

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(){

    test := AddUpper() //test变量接收Addupper返回的函数

    //因为Addupper返回的结果是一个函数,test(1)传参是1,
    //那么其实就是把1传参给Addupper里的int 参数x,x在使用的时候会和外面的n相加
    //那么x+n :1+10 =11
    fmt.Println(test(1))  //11


    //下面的结果会做说明
    fmt.Println(test(2))   //13

    fmt.Println(test(3))    //16
}
D:goprojectsrcmain>go run hello.go
11
13
16

当反复调用test函数时,因为n是只初始化一次,因此每次调用一次就进行累计,而不会初始化。变量n永远隐式存在于test中

进一步说明

//其实下面这块代码就是一个简单的闭包
var n int = 10
return func (x int) int {
    n = n + x
    return n
}
//返回的是一个匿名函数,但是这个匿名函数引用到了函数外的变量n,但是这个匿名函数会和这个n形成一个引用关系的整体,构成闭包

  

原文地址:https://www.cnblogs.com/wt645631686/p/9492676.html