首页 > 其他分享 >golang的闭包

golang的闭包

时间:2023-02-06 16:45:01浏览次数:40  
标签:闭包 f1 f2 函数 fmt golang 变量

func AddUpper() myFun {
   //闭包:返回的函数与这个函数引用到函数外的变量n形成一个整体,共同生成闭包,反复调用f1函数即AddUpper函数,n只初始化一次,所以返回的值的累加的。
   //闭包可以理解成一个类,函数是操作,n是字段。函数和它使用到的n构成闭包。
   //匿名函数引用了函数外部的变量n,把这个n叫做自由变量。闭包的实现确保只要闭包还被使用,那么被闭包引用的变量会一直存在。
   //根据闭包的概念,这个n变量不会被销毁,一直存在,相当于全局变量是常驻内存,但是这个变量又不会污染全局,只是存在在相应的环境f1,f2里。
   //即使已经离开了自由变量的环境也不会被释放或者删除,在闭包中可以继续使用这个自由变量,因此,简单的说:函数 + 引用环境 = 闭包
   //同一个函数与不同引用环境f1,f2组合,可以形成不同的实例
   var n int = 10
   return func(x int) int {
      n = n + x
      return n
   }
}
func main() {
   f1 := AddUpper()
   f2 := AddUpper()
   fmt.Println(f1(1)) //11
   fmt.Println(f1(2)) //13,累计了上面的f1(1)

   fmt.Println(f2(1)) //11
   fmt.Println(f2(2)) //13,累计了上面的f2(1)
}

 

标签:闭包,f1,f2,函数,fmt,golang,变量
From: https://www.cnblogs.com/xiaoxiaomuyuyu/p/17095868.html

相关文章

  • (转)golang常用库之-标准库 sync包| go语言如何实现单例模式、读写锁(sync.RWMutex)
    原文:https://blog.csdn.net/inthat/article/details/124218961golang常用库之-标准库sync包Golangsync包提供了基础的异步操作方法,包括互斥锁Mutex,执行一次Once和并发等......
  • (转)深入浅出Golang Runtime
    原文:https://www.cnblogs.com/lovezbs/p/14467801.html本文为腾讯NOW直播研发工程师郝以奋在8月19日深圳GopherMeetup上的分享,以下为根据PPT进行的详细注解。介绍......
  • (转)Golang标准库——runtime
    原文:https://www.jianshu.com/p/c1b6de70c004runtimeruntime包提供和go运行时环境的互操作,如控制go程的函数。它也包括用于reflect包的低层次类型信息;参见》reflect报......
  • golang变量
    1.golang变量命名规则由26个英文字母大小写,0-9,_组成。变量名不能以数字开头。变量都是先声明再使用,一旦声明必须使用。2.golang变量赋值方法2.1单个变量赋值......
  • (转)Golang 中关于闭包的坑
    原文:https://www.jianshu.com/p/fa21e6fada70所谓闭包是指内层函数引用了外层函数中的变量或称为引用了自由变量的函数,其返回值也是一个函数,了解过的语言中有闭包概念的......
  • (转)[Journey with golang] 5. Concurrent
    原文:https://www.cnblogs.com/JHSeng/p/12214964.html并发和并行是两种不同的概念。并行意味着程序在任意时刻都是同时运行的并发意味着程序在单位时间内是同时运行的......
  • (转)[Journey with golang] 1. Basic knowledge
    原文:https://www.cnblogs.com/JHSeng/p/12128461.html这一章介绍golang的一些基础知识。golang写起来跟c++很不一样,在我看来,它更像是c++/java/python的混合体,再经过一系列......
  • Golang入门第三天
    获取命令行参数init函数局部变量和全局变量变量的内存和变量的地址指针变量的使用new函数的使用值传递引用传递随机数的使用数组切片map结构体可见性规则p......
  • golang入门
    golang第一次学习数据类型序号类型和描述1布尔型布尔型的值只可以是常量true或者false。一个简单的例子:varbbool=true。2数字类型整型int和浮......
  • golang笔记
    手册网站:https://studygolang.com/pkgdocos.OpenFile("./app.log",os.O_CREATE|os.O_RDWR|os.O_APPEND,0644)app.log是文件名字,os.O_CREATE|os.O_RDWR|os.O_APPEND是......