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