在Go语言中,闭包是一个可以捕获周围作用域变量的匿名函数。闭包可以让你在函数内部定义另一个函数,并且这个内部函数可以访问外部函数的变量。下面是一个简单的闭包示例:
package main
import "fmt"
func main() {
// 定义一个变量
num := 10
// 定义一个闭包
closure := func() {
// 访问外部函数的变量
fmt.Println("num:", num)
}
// 调用闭包
closure()
}
在这个示例中,我们定义了一个名为closure
的闭包。这个闭包没有参数,也没有返回值。在闭包内部,我们可以访问外部函数main
中的变量num
。当我们调用closure()
时,它会输出num: 10
。
你还可以在闭包内部修改变量的值,例如:
package main
import "fmt"
func main() {
// 定义一个变量
num := 10
// 定义一个闭包
closure := func() {
// 访问外部函数的变量
fmt.Println("num before change:", num)
// 修改变量的值
num = 20
// 再次访问外部函数的变量
fmt.Println("num after change:", num)
}
// 调用闭包
closure()
// 再次访问外部函数的变量
fmt.Println("num after closure call:", num)
}
输出结果:
num before change: 10
num after change: 20
num after closure call: 20
在这个示例中,我们在闭包内部修变了num
的值,并且在闭包调用之后,num
的值仍然发生了改变。这是因为闭包捕获了外部函数的变量,而不是变量的副本。