Golang 中高级工程师学习笔记

闭包的作用

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

  • 封装: 闭包允许函数访问其外部作用域中的变量,形成了一种封装。这意味着可以在闭包内部定义私有的状态,并且只有闭包内部的函数可以访问这些状态。这提供了一种保护数据的机制,防止其被外部直接修改。
func counter() func() int {
   
    count := 0
    return func() int {
   
        count++
        return count
    }
}

// 使用闭包创建一个计数器
c := counter()
fmt.Println(c()) // 输出: 1
fmt.Println(c()) // 输出: 2
  • 延迟执行(延迟计算): 闭包可以实现延迟执行,通过在函数内部包含一些操作,只有在闭包被调用时才执行这些操作。这在需要延迟计算或实现懒加载时非常有用。
func lazyAdd(a, b int) func() int {
   
    result := 0
    return 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

相关推荐

  1. Golang 高级工程师学习笔记

    2024-01-21 09:14:07       58 阅读
  2. Golang学习笔记01

    2024-01-21 09:14:07       20 阅读
  3. Golang学习笔记--Gin框架

    2024-01-21 09:14:07       30 阅读
  4. golang学习笔记——go互斥锁

    2024-01-21 09:14:07       68 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-21 09:14:07       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-21 09:14:07       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-21 09:14:07       82 阅读
  4. Python语言-面向对象

    2024-01-21 09:14:07       91 阅读

热门阅读

  1. IDEA的使用

    2024-01-21 09:14:07       70 阅读
  2. SpringBoot ES 重建 Mapping

    2024-01-21 09:14:07       53 阅读
  3. FPGA中为什么不能双时钟触发

    2024-01-21 09:14:07       54 阅读
  4. RPC教程 2.支持并发与异步的客户端

    2024-01-21 09:14:07       52 阅读
  5. QGraphicsView 如何让图形大小适配窗口

    2024-01-21 09:14:07       48 阅读
  6. OSPF:开放式最短路径优先协议

    2024-01-21 09:14:07       47 阅读
  7. 【机器学习300问】13、学习率曲线有什么作用?

    2024-01-21 09:14:07       55 阅读