场景一:缓存
- 示例代码
package main
import "fmt"
func cacheFunction() func(int) int {
cache := make(map[int]int)
return func(n int) int {
if result, ok := cache[n]; ok {
return result
}
result := n * n
cache[n] = result
return result
}
}
- 原理:闭包中可以定义并维护一个局部变量(这里是
cache
映射),这个变量不会随着函数调用结束而销毁。每次函数调用时,先检查缓存中是否已有结果,有则直接返回,避免重复计算,从而提升效率。
场景二:延迟执行
- 示例代码
package main
import "fmt"
func delayedFunction() func() {
data := "Hello, World!"
return func() {
fmt.Println(data)
}
}
- 原理:闭包可以捕获并保存外部函数的变量环境(这里是
data
变量),即使外部函数执行完毕,闭包函数仍然可以访问这些变量。通过延迟执行闭包函数,可以在需要的时候使用捕获的变量,减少不必要的提前计算和资源占用,提升效率。