面试题答案
一键面试闭包在Go语言中通过将函数与其相关的环境(即该函数所引用的变量)组合在一起,实现数据封装。外部代码无法直接访问闭包内捕获的外部函数局部变量,但闭包函数自身可以访问和修改这些变量。
示例代码如下:
package main
import "fmt"
// 外部函数
func counter() func() int {
count := 0 // 外部函数的局部变量,被闭包捕获
return func() int {
count++
return count
}
}
你可以这样使用这个闭包:
func main() {
c := counter() // c 是一个闭包函数
fmt.Println(c()) // 输出 1
fmt.Println(c()) // 输出 2
}
在上述代码中,counter
函数返回一个闭包。这个闭包函数可以访问和修改 counter
函数中的局部变量 count
,但外部代码无法直接访问 count
,从而实现了数据封装。每次调用闭包 c
时,都会修改并返回 count
的值。