在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
的值仍然發生了改變。這是因為閉包捕獲了外部函數的變量,而不是變量的副本。