golang闭包

【1】什么是闭包:
闭包就是一个函数和与其相关的引用环境组合的一个整体

【2】案例展示:

package main
import "fmt"
//函数功能:求和
//函数的名字:getSum 参数为空
//getSum函数返回值为一个函数,这个函数的参数是一个int类型的参数,返回值也是int类型
func getSum() func (int) int {var sum int = 0return func (num int) int{sum = sum + num return sum}
}
//闭包:返回的匿名函数+匿名函数以外的变量num
func main(){f := getSum()fmt.Println(f(1))//1 fmt.Println(f(2))//3fmt.Println(f(3))//6fmt.Println(f(4))//10
}

感受:匿名函数中引用的那个变量会一直保存在内存中,可以一直使用

【3】闭包的本质:
闭包本质依旧是一个匿名函数,只是这个函数引入外界的变量/参数
匿名函数+引用的变量/参数 = 闭包

【4】特点:
(1)返回的是一个匿名函数,但是这个匿名函数引用到函数外的变量/参数 ,因此这个匿名函数就和变量/参数形成一个整体,构成闭包。
(2)闭包中使用的变量/参数会一直保存在内存中,所以会一直使用---》意味着闭包不可滥用(对内存消耗大)

【5】不使用闭包可以吗?

package main
import "fmt"
//函数功能:求和
//函数的名字:getSum 参数为空
//getSum函数返回值为一个函数,这个函数的参数是一个int类型的参数,返回值也是int类型
func getSum() func (int) int {var sum int = 0return func (num int) int{sum = sum + num return sum}
}
//闭包:返回的匿名函数+匿名函数以外的变量num
func main(){f := getSum()fmt.Println(f(1))//1 fmt.Println(f(2))//3fmt.Println(f(3))//6fmt.Println(f(4))//10fmt.Println("----------------------")fmt.Println(getSum01(0,1))//1fmt.Println(getSum01(1,2))//3fmt.Println(getSum01(3,3))//6fmt.Println(getSum01(6,4))//10
}
func getSum01(sum int,num int) int{sum = sum + numreturn sum
}
//不使用闭包的时候:我想保留的值,不可以反复使用
//闭包应用场景:闭包可以保留上次引用的某个值,我们传入一次就可以反复使用了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/26570.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[工具探索]英寸vs毫米下常见尺寸排版

文章目录 常见尺寸1. 照片尺寸2. 纸张尺寸3. 显示器和电视屏幕尺寸4. 手机屏幕尺寸5. 笔记本电脑屏幕尺寸6. 其他设备尺寸 换算公式换算方法常见照片尺寸对比表国际标准ISO(216)纸张尺寸 什么是英寸? 英寸(英语:inch&a…

Hutool有哪些常用方法

Hutool是一个Java工具类库,它提供了很多方便的方法来简化Java开发。以下是一些Hutool的常用方法及其示例: 一、日期时间处理 DateUtil.format(Date date, String pattern): 格式化日期。 // 代码如下 Date date new Date(); String format DateUtil…

计算机组成原理 期末复习笔记整理(上)(个人复习笔记/侵删/有不足之处欢迎斧正)

零、计算机的发展 冯.诺依曼计算机的特点: 1.计算机由五大部件组成 2.指令和数据以同等地位存于存储器,可按地址寻访 3.指令和数据用二进制表示 4.指令由操作码和地址码组成 5.存储程序(首次提出存储结构) 6.以运算器为中心(现代…

水泥行业超低排放简介

在当今社会,随着环保意识的不断提高,水泥行业作为重要的工业领域,其超低排放的实施范围及成效日益受到人们的关注。朗观视觉小编将从多个角度探讨水泥行业超低排放的实施范围,分析其背后的意义与影响,展望未来的发展趋…

如何在国产深度发行版Linux上部署ONLYOFFICE协作空间社区版?

如何在国产深度发行版Linux上部署ONLYOFFICE协作空间社区版? 书接上文: ONLYOFFICE 协作空间服务器如何一键安装自托管私有化部署 讲的是如何把ONLYOFFICE协作空间服务器部署到自托管云服务器VPS上面,这里继续,在自己Windows电…

c++ 智能指针使用注意事项及解决方案

c11智能指针 shared_ptr介绍注意事项示例解决方案 weak_ptr特点示例 unique_ptr特点示例 shared_ptr 介绍 shared_ptr 是一种智能指针,用于自动管理动态分配的对象的生命周期。它通过引用计数机制来确保当最后一个 shared_ptr 指向一个对象时,该对象会…

【C++ | 移动构造函数】一文了解C++11的 移动构造函数

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 ⏰发布时间⏰:2024-06-12 2…

[深度学习]使用python转换pt并部署yolov10的tensorrt模型封装成类几句完成目标检测加速任务

【简单介绍】 使用Python将YOLOv10模型从PyTorch格式(.pt)转换为TensorRT格式,并通过封装成类来实现目标检测加速任务,是一个高效且实用的流程。以下是该过程的简要介绍: 模型转换: 利用官方提供导出命令…

浅谈网络通信(2)

文章目录 一、TCP1.1、TCP提供的api —— ServerSocket 、Socket1.2、使用TCP协议编写回显服务器1.3、长/短连接 二、应用层协议、传输层协议详解2.1、应用层(后端开发必知必会)2.1.1、自定义应用层协议2.1.2、通用的协议格式2.1.2.1、XML2.1.2.2、json2.1.2.3、protobuffer 2.…

Protected and unprotected Meilisearch projects(/health)

Elasticsearch 做为老牌搜索引擎,功能基本满足,但复杂,重量级,适合大数据量。 MeiliSearch 设计目标针对数据在 500GB 左右的搜索需求,极快,单文件,超轻量。 所以,对于中小型项目来说…

02通讯录管理系统——创建项目

创建项目步骤如下: 1.创建新项目 2.添加文件 2.1创建项目 打开vs2019后,点击创建新项目,创建新的C项目 填写项目名称,选择路径 2.2添加文件 添加成功后,效果如图

Jira的原理及应用详解(六)

本系列文章简介: 在当今快速发展的软件开发和项目管理领域,有效的团队协作和精确的项目进度追踪是确保项目成功的关键。Jira作为一款广受欢迎的项目和问题追踪工具,以其强大的功能、灵活的定制性以及卓越的用户体验,赢得了全球众多…

【QT5】<知识点> QT串口编程

目录 前言 一、串口编程步骤 0. 添加串口模块 1. 自动搜索已连接的串口 2. 创建串口对象 3. 初始化串口 4. 打开串口 5. 关闭串口 6. 发送数据 7. 接收数据 二、简易串口助手 1. 实现效果 2. 程序源码 3. 实现效果二 前言 本篇记录QT串口编程相关内容&#xff0…

iText7画发票PDF——小tips

itext7教程: 1、https://blog.csdn.net/allway2/article/details/124295097 2、https://max.book118.com/html/2017/0720/123235195.shtm 3、https://www.cnblogs.com/fonks/p/15090635.html 4、https://www.cnblogs.com/sky-chen/p/13026203.html 5、官方&#xff…

React基础教程(06):Ref的应用

7、Ref的应用 7.1 给标签设置ref"username" 通过这个获取this.refs.username&#xff0c;ref可以获取到应用的真实dom <input style{{width:300}}ref{"text"}/> {/*非常推荐*/} <Button style{{backgroundColor:#2ba471, border:"none&qu…

探索 HNSW:分层导航小世界算法的深度解析

近年来&#xff0c;随着大规模数据和高维数据的广泛应用&#xff0c;高效的近似最近邻&#xff08;Approximate Nearest Neighbor, ANN&#xff09;搜索变得越来越重要。HNSW&#xff08;Hierarchical Navigable Small World&#xff09;算法因其出色的性能和高效的查询速度&am…

JAVAEE认证题库

1、&#xff08;2分&#xff09;下列哪个命令用于在Tomcat服务器上启动一个特定的Web应用程序&#xff1f; A、catalina.bat start B、catalina.bat deploy C、catalina.bat stop D、catalina.bat run 你的答案&#xff1a;D正确答案&#xff1a;A 2、&#xff08;2分&am…

毕业了!给学计算机朋友的 10 条血泪建议

大家好&#xff0c;我是程序员鱼皮。最近高考结束了&#xff0c;也有很多同学毕业了&#xff0c;首先祝福这些朋友在人生的新阶段一帆风顺。 刚参加完高考的朋友&#xff0c;面临的最大问题就是选专业&#xff0c;这段时间也有一些家长向我咨询&#xff1a;还能不能选计算机啦…

人脸匹配——OpenCV

人脸匹配 导入所需的库加载dlib的人脸识别模型和面部检测器读取图片并转换为灰度图比较两张人脸选择图片并显示结果比较图片创建GUI界面运行GUI主循环运行显示全部代码 导入所需的库 cv2&#xff1a;OpenCV库&#xff0c;用于图像处理。 dlib&#xff1a;一个机器学习库&#x…

爬山算法(Hill Climbing Algorithm)详细介绍

爬山算法&#xff08;Hill Climbing Algorithm&#xff09;详细介绍 1. 概述 爬山算法&#xff08;Hill Climbing Algorithm&#xff09;是一种基于启发式的搜索算法&#xff0c;广泛应用于人工智能、运筹学和优化问题。该算法以当前状态为起点&#xff0c;不断选择邻域中能够…