在Go語言中,閉包是一個(gè)可以捕獲周圍作用域變量的匿名函數(shù)。閉包可以讓你在函數(shù)內(nèi)部定義另一個(gè)函數(shù),并且這個(gè)內(nèi)部函數(shù)可以訪問外部函數(shù)的變量。下面是一個(gè)簡單的閉包示例:
package main
import "fmt"
func main() {
// 定義一個(gè)變量
num := 10
// 定義一個(gè)閉包
closure := func() {
// 訪問外部函數(shù)的變量
fmt.Println("num:", num)
}
// 調(diào)用閉包
closure()
}
在這個(gè)示例中,我們定義了一個(gè)名為closure
的閉包。這個(gè)閉包沒有參數(shù),也沒有返回值。在閉包內(nèi)部,我們可以訪問外部函數(shù)main
中的變量num
。當(dāng)我們調(diào)用closure()
時(shí),它會(huì)輸出num: 10
。
你還可以在閉包內(nèi)部修改變量的值,例如:
package main
import "fmt"
func main() {
// 定義一個(gè)變量
num := 10
// 定義一個(gè)閉包
closure := func() {
// 訪問外部函數(shù)的變量
fmt.Println("num before change:", num)
// 修改變量的值
num = 20
// 再次訪問外部函數(shù)的變量
fmt.Println("num after change:", num)
}
// 調(diào)用閉包
closure()
// 再次訪問外部函數(shù)的變量
fmt.Println("num after closure call:", num)
}
輸出結(jié)果:
num before change: 10
num after change: 20
num after closure call: 20
在這個(gè)示例中,我們在閉包內(nèi)部修變了num
的值,并且在閉包調(diào)用之后,num
的值仍然發(fā)生了改變。這是因?yàn)殚]包捕獲了外部函數(shù)的變量,而不是變量的副本。