閉包是在巢狀函數中定義的函數,可以存取巢狀函數作用域中的變量,包括傳回值已傳回後的變數。它們用於建立靈活可重複使用的程式碼,例如產生斐波那契數列的項:定義一個產生斐波那契項的閉包函數。閉包函數會捕捉兩個變量,分別保存斐波那契數列的前兩個項。呼叫閉包函數,依序計算並傳回新的斐波那契項。閉包函數可以隨著時間改變被捕獲變數的值,從而產生斐波那契數列的後續項。
Go 語言函數中的閉包
什麼是閉包?
閉包是在巢狀函數內部定義的函數。它可以存取巢狀函數的作用域中的變量,即使巢狀函數已經傳回。
程式碼範例:
func outer(multiplier int) func(x int) int { return func(x int) int { return multiplier * x } } func main() { doubler := outer(2) result := doubler(5) fmt.Println(result) // 输出:10 }
在在上面的範例中,函數outer
傳回了一個巢狀函數func(x int) int
。巢狀函數可以存取 outer
函數中的變數 multiplier
,即使 outer
函數已經傳回。
實戰案例:
閉包可用來建立靈活且可重複使用的程式碼。例如,我們可以寫一個閉包來產生斐波那契序列的項:
func fibonacci() func() int { a, b := 0, 1 return func() int { a, b = b, a+b return a } } func main() { f := fibonacci() for i := 0; i < 10; i++ { fmt.Println(f()) // 打印斐波那契序列的前 10 项 } }
其他要點:
以上是golang函數的閉包的詳細內容。更多資訊請關注PHP中文網其他相關文章!