在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
的值仍然发生了改变。这是因为闭包捕获了外部函数的变量,而不是变量的副本。