当前位置: 首页 > news >正文

Golang 中高级工程师学习笔记

闭包的作用

闭包(Closure)是一种函数值,它可以引用在其外部定义的变量。闭包允许这些变量保持在函数内部,而不是被每次调用时重新创建。闭包的作用主要体现在以下几个方面

  • 封装: 闭包允许函数访问其外部作用域中的变量,形成了一种封装。这意味着可以在闭包内部定义私有的状态,并且只有闭包内部的函数可以访问这些状态。这提供了一种保护数据的机制,防止其被外部直接修改。
func counter() func() int {count := 0return func() int {count++return count}
}// 使用闭包创建一个计数器
c := counter()
fmt.Println(c()) // 输出: 1
fmt.Println(c()) // 输出: 2
  • 延迟执行(延迟计算): 闭包可以实现延迟执行,通过在函数内部包含一些操作,只有在闭包被调用时才执行这些操作。这在需要延迟计算或实现懒加载时非常有用。
func lazyAdd(a, b int) func() int {result := 0return func() int {if result == 0 {result = a + b}return result}
}// 使用闭包实现懒加载
add := lazyAdd(3, 4)
fmt.Println(add()) // 输出: 7
  • 函数工厂: 闭包可以用作函数工厂,根据不同的参数创建并返回不同的函数。
func multiplyBy(factor int) func(int) int {return func(x int) int {return x * factor}
}// 使用闭包创建不同倍数的乘法函数
multiplyBy2 := multiplyBy(2)
multiplyBy3 := multiplyBy(3)
fmt.Println(multiplyBy2(5)) // 输出: 10
fmt.Println(multiplyBy3(5)) // 输出: 15
http://www.lryc.cn/news/287698.html

相关文章:

  • USB-C接口给显示器带来怎样的变化?
  • 写一份简单的产品说明书:格式和排版建议
  • 【Python学习】Python学习21- 正则表达式(1)
  • Docker 和 Kubernetes:容器化时代的崛起与演变
  • 美易官方京东养车回应索赔事件:推动行业健康发展并携手品牌商家加码补贴
  • 深度学习与图像描述生成——看图说话(3)
  • [SAP ABAP] ABAP编程中SY-SUBRC值的含义
  • 测试模型分类
  • mavros和PX4中的海拔高与椭球高转换
  • 洛谷刷题-【入门2】分支结构
  • 文件包含技术总结
  • Docker搭建私有仓库
  • 【计算机网络】【练习题】【新加坡南洋理工大学】【Computer Control Network】
  • 【学习笔记】CF1349F2 Slime and Sequences (Hard Version)
  • HarmonyOS 鸿蒙应用开发( 六、实现自定义弹窗CustomDialog)
  • # Java NIO(一)FileChannel
  • [嵌入式软件][启蒙篇][仿真平台] STM32F103实现串口输出输入、ADC采集
  • Deepin基本环境查看(四)【硬盘/分区、文件系统、硬连接/软连接】
  • JS之打地鼠案例
  • Kubernetes入门
  • EtherNet/IP开发:C++搭建基础模块,EtherNet/IP源代码
  • Django(九)
  • 解决Android Studio Unexpected tokens (use ; to separate expressions on the same line)
  • 【云原生】Docker网络模式和Cgroup资源限制
  • 实战:加密传输数据解密
  • 前端开发提高效率的两大工具
  • 探索设计模式的魅力:深入理解面向对象设计的深层原则与思维
  • 【Py/Java/C++三种语言详解】LeetCode每日一题240122【贪心】LeetCode670、最大交换
  • Linux/Doctor
  • 嵌入式linux学习之系统烧录