面试题答案
一键面试闭包实现数据封装原理
在Go语言中,闭包是一个函数值,它引用了其函数体之外的变量。通过闭包,这些外部变量可以被捕获并与闭包函数绑定在一起,形成一个独立的环境。由于外部无法直接访问闭包捕获的变量,只能通过闭包提供的函数接口来间接操作这些变量,从而实现了数据封装。
代码示例
package main
import "fmt"
// 定义一个函数,返回一个闭包
func counter() func() int {
count := 0
return func() int {
count++
return count
}
}
func main() {
// 获取闭包实例
c := counter()
// 通过闭包函数操作被封装的数据
fmt.Println(c())
fmt.Println(c())
fmt.Println(c())
}
在上述代码中,counter
函数返回一个闭包。在 counter
函数内部定义的 count
变量,被闭包捕获。外部代码无法直接访问 count
,只能通过调用闭包函数来增加并获取 count
的值,这就实现了对 count
变量的数据封装。