首页 > 其他分享 >21、闭包

21、闭包

时间:2023-05-15 22:22:49浏览次数:38  
标签:闭包 外层 fun1 21 fmt Println 函数

1.闭包的概念

Go语言中支持将一个函数作为另一个函数的返回值,这样就形成了闭包的结构

闭包(closure)
一个外层函数中,有内层函数,该内层函数中,会操作外层函数的局部变量(外层函数中的参数或者外层函数中直接定义的变量),并且该外层函数的返回值就是这个内层函数

这个内层函数和外城函数的局部变量,统称为闭包

  • 局部变量的生命周期会发生变化,正常的局部变量随着函数的调用而创建,随着函数的结束而销毁
  • 但是闭包结构中的外层函数的局部变量并不会随着外层函数的结束而销毁,因为内层函数还要继续使用
/**
 * @author ly (个人博客:https://www.cnblogs.com/qbbit)
 * @date 2023/5/15  21:42
 * @tags 喜欢就去努力的争取
 */
package main

import "fmt"

func main() {

	// 调用函数
	fun1 := increment()
	fmt.Printf("%T\n", fun1)
	res := fun1()
	fmt.Printf("%T\n", res)
	fmt.Println(res)

	res2 := fun1()
	fmt.Println(res2)

	res3 := fun1()
	fmt.Println(res3)

	fun2 := increment()
	fmt.Println(fun2())
	fmt.Println(fun2())
	fmt.Println(fun2())
}
func increment() func() int { // 外层函数
	i := 0
	return func() int { // 内层函数
		i++
		fmt.Println("i:", i)
		return i
	}
	// return 返回内存函数
}

标签:闭包,外层,fun1,21,fmt,Println,函数
From: https://www.cnblogs.com/qbbit/p/17403330.html

相关文章

  • 21st
     #include<iostream>usingnamespacestd; inta[14];intmain(){ intj=1,n; for(inti=1;i<=13;i++){ n=1; do{ if(j>13)// j=1; if(a[j]){//如果不是空盒跳过 j++; } else{ if(n==i) a[j]=i;//如果是第i个空盒存入 j++; n++; } }while(n<=i) ; } fo......
  • 天鹰优化AO算法2021年算法优化广义神经网络GRNN做多特征输入,单个因变量输出的拟合预测
    天鹰优化AO算法2021年算法优化广义神经网络GRNN做多特征输入,单个因变量输出的拟合预测模型。程序内注释详细直接替换数据就可以用。程序语言为matlab。不会替换数据的可以免费指导替换数据。。ID:8235679132604293......
  • 2021平(jia)凡(ban)的一年
    0x00刚刚把《平凡的世界》电视剧看完。也不知道什么原因,又去刷了一遍,可能是有那么一段时间比较迷茫、加班加到怀疑人生了吧。记得当年第一次看这本小说还是17年,好像是为了借一本什么书来着,就去了省图书馆。本来打算借完书就走的,结果在书架正好看到了《平凡的世界》,而且又有不少......
  • 分库分表的 21 条法则,hold 住!
    大家好,我是小富~(一)好好的系统,为什么要分库分表?本文是《分库分表ShardingSphere5.x原理与实战》系列的第二篇文章,距离上一篇文章已经过去好久了,惭愧惭愧~还是不着急实战,咱们先介绍下在分库分表架构实施过程中,会接触到的一些通用概念,了解这些概念能够帮助理解市面上其他的分库分表......
  • 2月28日学习总结20230321
    上午智慧物业管理系统Java开发有一个三层规范(包结构)controllerfileController:文件的上传的与删除service(重点)dao持久层domain:实体类的包,与数据库中的表建立映射关系,操作实体类就是操作数据库中的表。面向对象的思想,OIMcommon:工具的类,公共的组件(不再会有任何编辑,就直接使用了)messa......
  • 2月27日学习总结20230321
    上午PDDTDDDDDTDD测试驱动开发,先写模块测试,在进行模块开发;测试失败后编写实现代码,测试成功后接着迭代下一个功能DDD领域驱动设计,更多关注业务层,定义几个模块,写模块的功能BDD行为驱动开发,从用户需求出发,强调系统行为,是TDD的补充mock服务完整介绍:​​​测试开发工程必备技能之......
  • 3月7日20230321
    计划[]crm项目基本看完[]看crapapi代码[]补所不会的内容执行09点51分 学习crm知识记录springMVC项目搭建开发环境idea有项目和工程的概念,一个项目可以有多个工程创建好了项目newproject——>创建工程newmodel补全目录结构添加依赖,看用什么技术配置文件mybatis-config.xmla......
  • 3月6日20230321
    计划学习springboot学习mybatis看crapapi的代码执行09点41分 学习springboot,11点16分 用户注册持久层13点33分 springmvc的学习英语角IfIwanttochageamobilephonebrand,thenIchoosetheMeizubrand.BecauseMeizuistheearliestsmartphonebrandinChina,alt......
  • 3月3日记录20230321
    计划[]学习mybatis[]maven,可以看完[]js[]改bug,让跑起来执行10点13分 学习maven15点52分 结束maven基础,开始看jdbc17点15分 还是改不掉错,继续学习mybatis和js知识记录maven学习基本概念第一个maven程序插件创建maven程序idea版创建maventomcat插件安装与web工程启动问题很......
  • 3月2日记录20230321
    计划[]学习JavaScript[]看crapapi代码[]全速进入开发阶段[]JDBC和mysql的知识补上午09点44分 学习javascript10点20分 ​​学会用typora画思维导图​​11点47分 开始学习编写JavaScript下午13点37分 继续学习JavaScript15点53分 了解mybatis16点08分 学习java英语角KobeB......