5.4 Go 匿名函数与闭包


在这里插入图片描述
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
在这里插入图片描述

  • 推荐:「stormsha的主页」👈,持续学习,不断总结,共同进步,为了踏实,做好当下事儿~

  • 专栏导航

    • Python系列: Python面试题合集,剑指大厂
    • Git系列: Git操作技巧
    • GO系列: 记录博主学习GO语言的笔记,该笔记专栏尽量写的试用所有入门GO语言的初学者
    • 数据库系列: 详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 运维系列: 总结好用的命令,高效开发
    • 算法与数据结构系列: 总结数据结构和算法,不同类型针对性训练,提升编程思维

    非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

    💖The Start💖点点关注,收藏不迷路💖

    📒文章目录

      • 引言
      • 匿名函数
        • 定义和使用
        • 使用场景
      • 闭包
        • 基本概念
        • 示例
      • 高级使用技巧
        • 延迟执行
        • 错误处理
        • 并发编程
      • 结语


内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容

引言

在Go语言中,匿名函数和闭包是两个非常强大的概念,它们为开发者提供了极大的灵活性和表达力。对于中高级开发者来说,深入理解并掌握这些概念,将有助于编写更简洁、更高效的代码。

匿名函数

在Go语言中,匿名函数是一个没有名称的函数,它可以在需要时立即定义并使用。匿名函数通常用于需要临时函数的地方,或者作为参数传递给其他函数。

定义和使用

匿名函数的定义非常简单,它看起来就像一个普通的函数,但没有函数名。下面是定义和使用匿名函数的一个例子:

func main() {// 定义一个匿名函数并立即调用func() {fmt.Println("Hello, anonymous function!")}() // 注意这里的括号,表示立即调用// 将匿名函数赋值给变量greet := func(name string) {fmt.Printf("Hello, %s!\n", name)}greet("Go Developer")
}

使用场景

匿名函数的一个常见用途是作为回调函数。例如,你可以定义一个处理特定任务的匿名函数,并将其传递给另一个函数,该函数将在某个时间点调用这个回调。

闭包

闭包是一个函数能够记住并访问其外部作用域中的变量,即使该函数在其外部作用域执行完毕后仍然可以被调用。

基本概念

闭包在Go中是通过匿名函数实现的。当一个匿名函数捕获了其外部作用域的变量时,它就形成了一个闭包。闭包允许函数携带状态,这是它与普通函数的主要区别。

示例

下面是一个创建计数器的闭包示例:

func main() {counter := newCounter()fmt.Println(counter()) // 输出: 1fmt.Println(counter()) // 输出: 2fmt.Println(counter()) // 输出: 3
}func newCounter() func() int {count := 0return func() int {count++return count}
}

在这个例子中,newCounter 函数返回了一个匿名函数,这个匿名函数捕获了 count 变量,每次调用时都会增加 count 的值。

高级使用技巧

延迟执行

Go中的匿名函数可以与 defer 关键字一起使用,实现延迟执行的效果。这在需要初始化或清理资源时非常有用。

func main() {defer func() {fmt.Println("Deferred function called")}()fmt.Println("Main function running")
}

错误处理

在Go中,错误处理通常通过返回错误值来实现。使用闭包,我们可以创建一个错误处理的上下文,使得错误处理更加灵活。

func handleError(fn func() error) {if err := fn(); err != nil {fmt.Printf("An error occurred: %v\n", err)}
}func main() {handleError(func() error {// 模拟可能发生的错误return errors.New("something went wrong")})
}

并发编程

Go的并发模型是基于goroutine的,匿名函数可以轻松地与goroutine结合使用,实现并发执行。

func main() {var wg sync.WaitGroupfor i := 0; i < 5; i++ {wg.Add(1)go func(id int) {defer wg.Done()fmt.Printf("Goroutine %d is running\n", id)}(i)}wg.Wait()
}

结语

匿名函数和闭包是Go语言中的重要特性,它们提供了强大的编程能力。通过本文的介绍,希望能够帮助中高级开发者更好地理解和使用这些特性,编写出更加优雅和高效的代码。记住,掌握这些技巧将使你在Go语言的世界中更加游刃有余。


🔥🔥🔥道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

💖The End💖点点关注,收藏不迷路💖

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

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

相关文章

ASO优化0基础关键词应用指导

很多人还在为如何推广App而头疼&#xff0c;小柚肯定的告诉你。ASO优化是目前App推广中最基础的办法&#xff0c;是不可或缺的一个环节。ASO优化内容包括关键词、应用描述、评论等。关键词一般分为行业通用词、品牌词、竞品词等&#xff0c;优化师利用专业的ASO工具提供查询。为…

网站笔记:huggingface——can you run it?

Can You Run It? LLM version - a Hugging Face Space by Vokturz 1 配置设置部分 Model Name就是需要测量的模型名称 GPU Vendor ——GPU供应商 Filter by RAM (按RAM过滤) 筛选出所有内存容量在选择范围之间的GPU GPU 下拉菜单选择具体的GPU型号 LoRa % trainable param…

靠AI创意,变现20w!

文章首发于公众号&#xff1a;X小鹿AI副业 大家好&#xff0c;我是程序员X小鹿&#xff0c;前互联网大厂程序员&#xff0c;自由职业2年&#xff0c;也一名 AIGC 爱好者&#xff0c;持续分享更多前沿的「AI 工具」和「AI副业玩法」&#xff0c;欢迎一起交流~ 之前X小鹿一直在各…

记录一次安装k8s初始化失败

实例化 kubeadm init --configkubeadm.yaml --ignore-preflight-errorsSystemVerification报错 [init] Using Kubernetes version: v1.25.0 [preflight] Running pre-flight checks error execution phase preflight: [preflight] Some fatal errors occurred:[ERROR CRI]: co…

海外仓erp系统是什么?和海外仓管理系统一样吗?

为了满足海外仓全球化发展的大趋势&#xff0c;同时提升海外仓运转的效率&#xff0c;一套好用&#xff0c;性价比高的海外仓管理系统还是非常重要的。 不过很多海外仓企业其实不太分得清erp系统和海外仓管理系统的差异&#xff0c;今天我们就来系统的聊一下&#xff0c;方便大…

K8S有了Service,为什么还要Ingress?

1、有了Service为什么还要Ingress? NodePort对外暴露端口存在的不足&#xff1a; 一个端口只能一个服务使用, 端口需要提前规划。 随着业务扩展, 端口的管理将是一个头疼的问题 只支持4层的负载均衡 LoadBalancer存在的不足&#xff1a; 贵、贵、贵。 要上云(俗话说上云…

需求跟踪矩阵是什么?怎么创建?一文详解

一、什么是需求跟踪矩阵 对项目经理或产品经理来说&#xff0c;需求清单肯定不陌生&#xff0c;那什么是需求跟踪矩阵呢&#xff1f; 需求跟踪矩阵&#xff08;Requirement Track Matrix&#xff0c;简称RTM &#xff09;&#xff0c;是把产品需求从其来源连接到能满足需求的…

使用MinGW来构建C语言项目

文章目录 安装MinGW编写C语言源代码创建构建脚本构建项目 MinGW构建C语言项目的基本步骤&#xff1a; 安装MinGW 从MinGW的官方网站下载MinGW安装程序。 运行安装程序&#xff0c;选择安装基本组件&#xff0c;如gcc编译器、gdb调试器和make工具。 安装完成后&#xff0c;将…

无人机助力光伏项目测绘建模

随着全球对可再生能源需求的不断增长&#xff0c;光伏项目作为其中的重要一环&#xff0c;其建设规模和速度都在不断提高。在这一背景下&#xff0c;如何高效、准确地完成光伏项目的测绘与建模工作&#xff0c;成为了行业发展的重要课题。近年来&#xff0c;无人机技术的快速发…

2024.05.11 校招 实习 内推 面经

绿*泡*泡VX&#xff1a; neituijunsir 交流*裙 &#xff0c;内推/实习/校招汇总表格 1、校招&实习 | 小米24届春招&25届实习岗位热招中&#xff08;内推&#xff09; 校招&实习 | 小米24届春招&25届实习岗位热招中&#xff08;内推&#xff09; 2、校招 | …

哪个品种能够叫板白银现货t+d?

白银TD是在上海黄金交易所挂牌的白银投资品种&#xff0c;它可以说是国内版的现货白银交易&#xff0c;大家也可以把它理解成为白银交易的“快速通道”。通过它&#xff0c;投资者可以更加灵活地买卖白银&#xff0c;实现对内地白银价格的跟踪&#xff0c;并获得一定的杠杆化收…

git工作流程

以财务开发为例子&#xff1a; 1. 新建分支 1.1. upstream新建分支&#xff1a;finance-feature 1.2. origin新建对应分支&#xff1a;finance-feature 1.3 新建本地分支 git branch finance-feature 注&#xff1a; 同步远程分支&#xff1a;git fetch upstream feature…

pwa动态修改manifest.json(start_url)

pwa动态设置manifest.json 引言 在使用pwa开发时&#xff0c;因需求原因&#xff0c;需要动态设置pwa安装应用的地址&#xff0c;也就是manifest.json中的start_url地址&#xff0c;比如说业务场景需要携带不同的参数在安装地址后台&#xff0c;从中遇到了很多问题&#xff0…

CSDN智能总结助手

github项目地址&#xff1a; https://github.com/anjude/little-demo/tree/master 获取CSDN的user name和user token 打开csdn&#xff0c;打开控制台 - Application - Cookies&#xff0c;找到domain为blog.csdn.net的cookie&#xff0c;复制user_name和user_token的值 把上…

最详细Linux提权总结(建议收藏)

1、内核漏洞脏牛提权 查看内核版本信息 uname -a 具体提权 1、信息收集配合kali提权 uname -a #查看内核版本信息 内核版本为3.2.78&#xff0c;那我们可以搜索该版本漏洞 searchsploit linux 3.2.78 找到几个可以使用的脏牛提权脚本&#xff0c;这里我使用的是40839.c脚…

11.客户端-文件上传、文件下载的实现

本章主要模拟终端设备通过事先制定的协议向服务端请求文件上传、文件下载的操作。 示例代码: 1.客户端分段读取文件发送至服务端 private static void input(String path) {// 时间戳,唯一ID标记long id = System.currentTimeMillis();File file = new File(path);long le…

独立乙游井喷成新趋势,真来抢市场还是只画大饼?

国产乙游市场又迎来了新变化。 进入5月份&#xff0c;独立乙女游戏如雨后春笋般冒了出来&#xff0c;两、三个人组成的制作组&#xff0c;没有任何程序协助和资金支持&#xff0c;全靠为爱发电来打造一款乙女游戏&#xff0c;成为了今夏乙游市场的新趋势。 目前已经有独立乙游…

【Java】在高并发场景下,保证 Redis 缓存一致性的几种方案

在高并发场景下&#xff0c;保证 Redis 缓存一致性是一个常见的挑战。以下是几种常见的解决方案及其优缺点&#xff0c;以及相应的代码示例。 1. Cache Aside Pattern (旁路缓存模式) 原理 读取数据时&#xff0c;先读缓存&#xff0c;如果缓存没有命中&#xff0c;再从数据…

SwiftUI 5.0(iOS 17)进一步定制 TipKit 外观让撸码如虎添翼

概览 在之前 SwiftUI 5.0&#xff08;iOS 17&#xff09;TipKit 让用户更懂你的 App 这篇博文里&#xff0c;我们已经初步介绍过了 TipKit 的基本知识。 现在&#xff0c;让我们来看看如何进一步利用 SwiftUI 对 TipKit 提供的细粒度外观定制技巧&#xff0c;让 Tip 更加“明眸…

蓝桥杯第十四届国赛B组刷题笔记

A-0子2023&#xff1a; 题目&#xff1a; 小蓝在黑板上连续写下从 11 到 20232023 之间所有的整数&#xff0c;得到了一个数字序列&#xff1a; &#x1d446;12345678910111213...20222023S12345678910111213...20222023。 小蓝想知道 &#x1d446;S 中有多少种子序列恰好等…