面试题答案
一键面试Go语言闭包概念
闭包是一个函数值,它可以引用其函数体外部的变量。在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
函数返回一个闭包。每次调用这个闭包,它都会增加并返回i
的值。这里i
的生命周期因为闭包而延长,不会随着counter
函数返回而销毁。
- 延迟计算:
package main
import "fmt"
func calculate(a, b int) func() int {
sum := a + b
return func() int {
return sum
}
}
func main() {
result := calculate(3, 5)
// 这里可以在需要的时候才计算结果
fmt.Println(result())
}
calculate
函数返回一个闭包,这个闭包可以在需要的时候计算并返回a
和b
的和。通过这种方式,可以实现延迟计算,只有在调用闭包时才会真正获取结果。