面试题答案
一键面试闭包概念
在Go语言中,闭包是一个函数值,它引用了其函数体之外的变量。这个函数可以访问并操作这些外部变量,即使这些变量的作用域在函数定义之外。闭包使得这些变量可以在函数调用之间保持其状态。
代码示例
package main
import "fmt"
func counter() func() int {
i := 0
return func() int {
i++
return i
}
}
可以这样调用这个函数:
func main() {
c := counter()
fmt.Println(c())
fmt.Println(c())
fmt.Println(c())
}
闭包作用
- 状态保持:在上述示例中,
counter
函数返回的匿名函数引用了counter
函数内部的变量i
。每次调用返回的匿名函数时,i
的值都会增加并保留上次调用后的状态。例如,多次调用c()
,i
会依次递增,体现了闭包对变量i
状态的保持。 - 数据封装:外部代码只能通过返回的匿名函数来间接访问和修改
i
,而不能直接访问counter
函数内部的i
变量,实现了一定程度的数据封装。