Go 語言函數閉包
Go 語言支持匿名函數,可作為閉包。匿名函數是一個"內聯"語句或運算式。匿名函數的優越性在於可以直接使用函數內的變數,不必申明。
以下實例中,我們創建了函數 getSequence() ,返回另外一個函數。該函數的目的是在閉包中遞增 i 變數,代碼如下:
實例
package main
import "fmt"
func getSequence() func() int {
i:=0
return func() int {
i+=1
return i
}
}
func main(){
/* nextNumber 為一個函數,函數 i 為 0 */
nextNumber := getSequence()
/* 調用 nextNumber 函數,i 變數自增 1 並返回 */
fmt.Println(nextNumber())
fmt.Println(nextNumber())
fmt.Println(nextNumber())
/* 創建新的函數 nextNumber1,並查看結果 */
nextNumber1 := getSequence()
fmt.Println(nextNumber1())
fmt.Println(nextNumber1())
}
import "fmt"
func getSequence() func() int {
i:=0
return func() int {
i+=1
return i
}
}
func main(){
/* nextNumber 為一個函數,函數 i 為 0 */
nextNumber := getSequence()
/* 調用 nextNumber 函數,i 變數自增 1 並返回 */
fmt.Println(nextNumber())
fmt.Println(nextNumber())
fmt.Println(nextNumber())
/* 創建新的函數 nextNumber1,並查看結果 */
nextNumber1 := getSequence()
fmt.Println(nextNumber1())
fmt.Println(nextNumber1())
}
以上代碼執行結果為:
1 2 3 1 2