在Go語言中,閉包函數是指一個函數可以訪問到其外部作用域中的變量。閉包函數可以將變量作為參數或返回值,用于實現某些特定的功能。
下面是一個簡單的閉包函數的例子:
func main() {
// 定義匿名函數并賦值給變量add
add := func(x, y int) int {
return x + y
}
// 調用閉包函數
result := add(3, 5)
fmt.Println(result) // 輸出:8
}
在上面的例子中,我們定義了一個匿名函數并將其賦值給變量add
,該函數可以訪問到其外部作用域中的變量x
和y
,并返回它們的和。我們通過調用add
函數,傳入參數3和5,得到結果8。
閉包函數還可以用于實現函數工廠,即返回一個函數的函數。下面是一個示例:
func adder() func(int) int {
sum := 0
return func(x int) int {
sum += x
return sum
}
}
func main() {
// 調用函數工廠,返回一個閉包函數
a := adder()
// 調用閉包函數
fmt.Println(a(1)) // 輸出:1
fmt.Println(a(2)) // 輸出:3
fmt.Println(a(3)) // 輸出:6
}
在上面的例子中,我們定義了一個adder
函數,它返回一個閉包函數。閉包函數中的變量sum
會在每次調用時保留其狀態。我們通過調用adder
函數得到一個閉包函數a
,然后分別調用a
函數并傳入不同的參數,最后輸出結果。可以看到,每次調用a
函數時,變量sum
會保持其之前的累加結果。