面试题答案
一键面试package main
import "fmt"
// 定义一个函数,返回一个闭包
func dataSharing() (func(int), func() int) {
// 定义共享的整数变量
sharedData := 0
// 第一个闭包函数,用于设置共享数据
setData := func(newValue int) {
sharedData = newValue
}
// 第二个闭包函数,用于获取共享数据
getData := func() int {
return sharedData
}
return setData, getData
}
你可以这样使用:
func main() {
set, get := dataSharing()
set(10)
fmt.Println(get()) // 输出: 10
}
闭包在其中起到的作用:
- 数据封装:
sharedData
变量被封装在dataSharing
函数内部,外部无法直接访问,只有通过返回的闭包函数setData
和getData
才能操作这个变量,提高了数据的安全性和封装性。 - 数据共享:不同的闭包函数
setData
和getData
可以访问和修改同一个sharedData
变量,实现了函数间的数据共享。同时,由于闭包会捕获并保存其定义时的环境,即使dataSharing
函数执行结束,sharedData
变量依然存在,保证了数据的持续性。