Go 语言闭包详解及常见应用

Go 语言闭包详解及常见应用

1. 闭包的定义与机制

闭包(Closure)是函数和其引用环境的组合体,允许函数访问并操作其外部作用域中的变量,即使外部函数已经执行完毕。在 Go 中,闭包通过匿名函数实现,捕获的变量以引用方式传递。

Go 编译器通过 逃逸分析(Escape Analysis) 决定变量分配在栈(Stack)还是堆(Heap)。

核心特点

  • 状态保持:闭包可以保留对外部变量的引用,形成私有状态。
  • 延迟绑定:变量在闭包被调用时动态求值,而非定义时。
示例:闭包基础
func counter() func() int {
   
    count := 0
    return func() int {
   
        count++ // 捕获外部变量 count
        return count
    }
}

func main() {
   
    c := counter()
    fmt.Println(c()) // 1
    fmt.Println(c()) // 2 (状态被保留)
}

2. 常见应用场景
2.1 状态封装

闭包可以隐藏变量,实现类似“私有属性”的效果。

func NewBankAccount(initialBalance int) func(int) int {
   
    balance := initialBalance
    return func(amount int) int {
   
        balance += amount
        return balance
    }
}

// 使用
account := NewBankAccount(100)
account(50)  // 余额 150
2.2 延迟执行(Defer 增强)

结合 defer 实现资源释放或日志记录。

func logTime() func() {
   
	start := time
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值