Go语言--函数类型、匿名函数和闭包

在Go语言中,函数也是一种数据类型,我们可以通过 type 来定义它,它的类型就是所有拥有相同的参数,相同的返回值的一种类型。

语法

通过type给函数类型起名,然后通过名字进行函数的调用
在这里插入图片描述

  • 好处:多态
    在这里插入图片描述
  • 通过统一的调用接口去实现不同的功能,函数可以进行扩展。

匿名函数和闭包

所谓闭包就是一个函数“捕获”了和它在同一作用域的其它常量和变量。这就意味着当闭包被调用的时候,不管在程序什么地方调用,闭包能够使用这些常量或者变量。它不关心这些捕获了的变量和常量是否已经超出了作用域,所以只要闭包还在使用它,这些变量就还会存在。
在 Go 语言里,所有的匿名函数(Go 语言规范中称之为函数字面量)都是闭包。匿名函数是指不需要定义函数名的一种函数实现方式,它并不是一个新概念,最早可以回溯到 1958年的LIsp语言。

闭包函数

声明在一个函数中的函数,叫做闭包函数。

匿名函数

在这里插入图片描述

  • :=可以自动推导类型

  • 可以定义匿名函数的同时调用函数。定义了匿名函数,一定要进行调用,否则会报错。
    在这里插入图片描述

  • 也可以同时传参
    在这里插入图片描述

  • 有参有返回值
    在这里插入图片描述

闭包捕获外部函数的特点

  • 闭包是以引用的方式捕获外部变量。在闭包内,修改外部变量的值,相当于把外部变量的值也修改了。
    在这里插入图片描述
  • 普通函数内部的变量,只有在函数被调用时,x才分配空间,如果没有初始化就初始化值为0,函数调用完毕以后,就自动释放。
    在这里插入图片描述
  • 但是闭包不关心捕获变量和常量是否已经超出作用域,只要闭包还在,这些变量就会存在。
    在这里插入图片描述

闭包的特点

  • 让外部访问函数内部变量成为可能;

  • 局部变量会常驻在内存中;

  • 可以避免使用全局变量,防止全局变量污染;

  • 会造成内存泄漏(有一块内存空间被长期占用,而不被释放)

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

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

相关文章

信息安全驱动汽车行业快速向数字化转型

开发一款安全性良好的软件是困难的,它需要专业知识的积累以及对常见编程缺陷和规则的了解,例如检查输入范围、管理内存分配和回收、寻址字符串格式、避免悬空指针等等。通常情况下,编写安全代码与开发人员编写“流畅”代码的自然愿望形成了对…

【数据库】第7讲 关系数据模型(章节测验)

一. 单选题 1【单选题】下面对于关系的叙述中,不正确的是(C) A、关系中的每个属性是不可分解的B、在关系中元组的顺序是无关紧要的C、任意的一个二维表都是一个关系D、每一个关系只有一种记录类型 2【单选题】关系模型的完整性约束不包括&…

日本最新型高达式巨型机器人承担铁路维护任务

日本有制造现实生活中的高达式巨型机器人的历史,但它们往往是用于娱乐目的,而不是实际应用。不过,日本刚刚开始使用一个 40 英尺高的人形机器人来维护铁路线。 大约两年前,西日本铁路公司(JR 西日本)制造了…

【Unity】RPG2D龙城纷争(八)寻路系统

更新日期:2024年7月4日。 项目源码:第五章发布(正式开始游戏逻辑的章节) 索引 简介一、寻路系统二、寻路规则(角色移动)三、寻路规则(角色攻击)四、角色移动寻路1.自定义寻路规则2.寻…

[C++]——同步异步日志系统(2)

同步异步日志系统 一、 不定参函数1.1 不定参宏函数的使用1.2 C 语言中不定参函数的使用1.3 C不定参数使用 二、设计模式2.1 单列模式2.2 工厂模式2.3 建造者模式2.4 代理模式 在我们开发同步异步日志系统之前,需要了解一些相关的技术知识。 一、 不定参函数 在初学…

VCL界面组件DevExpress VCL v24.1 - 发布全新的矢量主题

DevExpress VCL是DevExpress公司旗下最老牌的用户界面套包,所包含的控件有:数据录入、图表、数据分析、导航、布局等。该控件能帮助您创建优异的用户体验,提供高影响力的业务解决方案,并利用您现有的VCL技能为未来构建下一代应用程…

Hadoop权威指南-读书笔记-03-Hadoop分布式文件系统

Hadoop权威指南-读书笔记 记录一下读这本书的时候觉得有意思或者重要的点~ 还是老样子~挑重点记录哈😁有兴趣的小伙伴可以去看看原著😊 第三章 Hadoop分布式文件系统 当数据集的大小超过一台独立的物理计算机的存储能力时,就有必要对它进行分…

【数据结构】(C语言):二叉搜索树(不使用递归)

二叉搜索树: 非线性的,树是层级结构。基本单位是节点,每个节点最多2个子节点。有序。每个节点,其左子节点都比它小,其右子节点都比它大。每个子树都是一个二叉搜索树。每个节点及其所有子节点形成子树。可以是空树。 …

【堆 优先队列】23. 合并 K 个升序链表

本文涉及知识点 堆 优先队列 LeetCode23. 合并 K 个升序链表 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例 1: 输入:lists [[1,4,5],[1,3,4],[2,6]] 输出&#…

【Whisper】WhisperX: Time-Accurate Speech Transcription of Long-Form Audio

Abstract Whisper 的跨语言语音识别取得了很好的结果,但是对应的时间戳往往不准确,而且单词级别的时间戳也不能做到开箱即用(out-of-the-box). 此外,他们在处理长音频时通过缓冲转录

「C++系列」C++ 变量作用域

文章目录 一、C 变量作用域二、局部变量三、全局变量四、类作用域五、相关链接 一、C 变量作用域 在C中,变量的作用域(Scope)指的是变量在程序中可以被访问的区域。作用域由花括号{}定义,这些花括号可以出现在函数体、控制结构&a…

windows安装jdk21

下载 下载zip解压 设置环境变量 设置JAVA_HOME环境变量 Path环境变量添加如下值%HAVA_HOME%\bin 打开新的cmd,输入java --version查看效果

恒创科技:HTTP错误码403禁止意味着什么,怎么修复它?

HTTP错误码403禁止意味着客户端无权访问特定网页或服务器。403 错误表示客户端存在问题,无论用户使用的是哪种网络浏览器,都可能发生这种情况。幸运的是,阻止服务器允许访问特定页面的问题通常可以修复。以下是一些常见原因和相应的解决方案。…

【ROS2】Ubuntu 24.04 源码编译安装 Jazzy Jalisco

目录 系统要求 系统设置 设置区域启用所需的存储库安装开发工具 构建 ROS 2 获取 ROS 2 代码使用 rosdep 安装依赖项安装额外的 RMW 实现(可选)在工作区构建代码 设置环境 尝试一些例子 下一步 备用编译器 Clang保持最新状态 故障排除 卸载 系统要求 当前…

滤波算法学习笔记

目录 引言 一、定义 二、分类 三、常见滤波算法 四、应用与优势 五、发展趋势 例程 1. 均值滤波(Moving Average Filter) 2. 中值滤波(Median Filter) 3. 高斯滤波(Gaussian Filter) 4.指数移动…

微信开发者工具报错 Error: module ‘xxx.js‘ is not defined, require args is ‘xxx.js‘

背景 报错如下 检查 代码逻辑和写法都是ok的重新打开项目又是可以的 解决方案 先确保微信开发者工具和uniapp的将js编译成es5都开着(这个是默认开的) 然后把微信开发者工具关了重开 一般做这一步就会好了,但是只是临时解决 &#xff08…

《Winodws API每日一练》8.2 static控件

在 Windows 编程中,"Static" 控件是一种常见的用户界面元素,用于显示静态文本或图像,而无法进行用户交互。它通常用于显示标签、标题、说明文本或静态图像等信息。Static 控件是一种静态的、只读的显示元素,不接受用户的…

秒懂设计模式--学习笔记(6)【创建篇-建造者模式】

目录 5、建造者模式5.1 介绍5.2 建造步骤的重要性5.3 地产开发商的困惑5.4 建筑施工方5.5 工程总监5.6 项目实施5.7 建造者模式的各角色定义5.8 建造者模式 5、建造者模式 5.1 介绍 建造者模式(Builder)又称为生成器模式,主要用于对复杂对象…

爬虫-豆瓣电影排行榜

获取数据 requests库 获取数据环节需要用到requests库。安装方式也简单 pip install requests 爬取页面豆瓣读书 Top 250 用requests库来访问 import requests res requests.get(https://book.douban.com/top250/) 解析: 导入requests库调用了requests库中的…

明星代言6个提升企业形象的杀手锏-华媒舍

在当今竞争激烈的商业世界中,企业形象的塑造对于品牌的发展至关重要。而明星代言作为一种常见的营销手段,被广泛使用来提升企业形象和产品销售。本文将介绍明星代言的六个杀手锏,帮助您了解如何通过明星代言来提升企业形象。 1. 拥有广泛的影…