package main
import "fmt"
func accumulator() func(...int) int {
sum := 0
return func(nums ...int) int {
for _, num := range nums {
sum += num
}
return sum
}
}
好处
- 代码简洁:通过闭包,将状态(
sum
)和操作(累加)封装在一起,使得代码结构更紧凑,逻辑更清晰。
- 数据持久化:闭包可以访问和修改外部函数的变量(
sum
),实现数据的持久化。每次调用返回的闭包函数,sum
的值都会基于上一次调用的结果进行累加,不需要在外部维护一个全局变量来记录累加状态。
可能存在的问题
- 内存泄漏:如果闭包函数一直被持有,外部函数的变量(
sum
)也不会被垃圾回收机制回收,可能会导致内存泄漏。例如,如果将闭包函数存储在一个全局变量中,并且持续调用,sum
占用的内存会不断增加,除非手动重置 sum
。
- 线程安全问题:如果在多线程环境下使用这个闭包函数,由于
sum
是共享的,可能会出现竞态条件。例如,多个线程同时调用闭包函数进行累加操作,可能导致 sum
的值计算错误,需要使用诸如互斥锁(sync.Mutex
)等机制来保证线程安全。