Go语言-闭包

时间:2025-02-23 08:58:22

func ExFunc(n int) func() {

    sum:=n

    return func () {    //直接在返回处的匿名函数

    fmt.Println(sum+1)

    }

}

 

另一个例子:

package main

import "fmt"

func ExFunc(n int) func() {

    return func() {

    n++ //这里对外部变量加1

    (n)

    }

}

 

func main() {

    myFunc := ExFunc(10)

    myFunc()         //这里输出11

    myAnotherFunc := ExFunc(20)

    myAnotherFunc()  //这里输出21

    myFunc() //12

    myAnotherFunc()//22

//再一次调用myFunc()函数,结果是12,由此得出以下两点

//1.内函数对外函数的变量的修改,是对变量的引用

//2.变量被引用后,它所在的函数结束,这变量也不会马上被销毁,引用变量和产生的函数变量的生命期是一致的

}