Go语言学习笔记:闭包

闭包

/*
首先这里的func(int) int是指函数test()返回一个函数
类似的,返回多个值是这样写:func A()(int,int,float32)
*/
func test() func(int) int {
    n := 1
    fmt.Println(n)//当main()运行结束后时这里的n只会输出一次
    return func(x int) int {
        n = n + x
        return n
    }
}

func main() {
    f := test1()
    //f承接test()的返回值,每次使用f()时都是在调用的test()的返回函数,n的值会一直保留,不会因为重新调用而被刷新
    fmt.Println(f(1))//结果为 2
    fmt.Println(f(2))//结果为 4
    fmt.Println(f(3))//结果为 7
}
书中对闭包的解释

闭包的概念:是可以包含自由(未绑定到特定对象)变量的代码块,这些变量不在这个代码块内或者任何全局上下文中定义,而是在定义代码块的环境中定义。要执行的代码块(由于自由变量包含在代码块中,所以这些自由变量以及它们引用的对象没有被释放)为自由变量提供绑定的计算环境(作用域)。1

我的理解(人话版)
为什么能够实现闭包

原因就在于test()是f的父函数,而f被赋给了一个变量,这导致f在main()结束之前始终在内存中。因此test()中的变量也始终在内存中,不会在f := test()调用结束后被回收。

闭包有啥用

一般来说函数运行之后,其内部变量所占用的内存就会被释放。如果需要使用函数内部的变量继续进行操作,那就需要用到闭包来调用函数内部的变量,因此就可以得出闭包的主要功能:1.闭包能够读取其他函数内部变量;2.能让这些变量的值始终保持在内存中,不会在f调用后被自动清除。


  1. 许式伟 的《Go语言编程》 ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值