面试题答案
一键面试package main
import "fmt"
// Counter 返回一个包含增加计数器值的函数
func Counter() func() int {
count := 0
// 匿名函数,作为闭包
return func() int {
count++
return count
}
}
闭包的作用
闭包在这里起到了数据封装的作用。在 Counter
函数中定义的 count
变量,被匿名函数所捕获。由于匿名函数持有对 count
的引用,count
变量不会在 Counter
函数返回后被销毁。外部只能通过匿名函数来修改和获取 count
的值,而无法直接访问 count
变量,实现了数据的隐藏和封装。
匿名函数的作用
匿名函数提供了操作封装数据(即 count
)的接口。它定义了如何增加计数器的值并返回结果。外部通过调用这个匿名函数来间接操作 count
,保证了对 count
操作的一致性和安全性。
你可以通过以下方式调用上述代码:
func main() {
c := Counter()
fmt.Println(c()) // 输出: 1
fmt.Println(c()) // 输出: 2
}