如何在 Golang 中使用閉包?
為了理解什麼是閉包,我們必須知道什麼是匿名函式以及如何使用它們。
匿名函式
在 Go 中,匿名函式是沒有名稱的函式。簡單來說,匿名函式在宣告時不使用任何變數作為名稱。
我們知道,我們使用如下所示的類似語法宣告函式。
func Sample(){
// some code
}雖然我們為上述函式(**Sample**)命名了,但在匿名函式的情況下,我們沒有。
什麼是閉包函式?
閉包函式是可以訪問其周圍環境的匿名函式。在 **Go** 中,閉包函式可以擁有自己的狀態,並且當我們建立函式的新例項時,該狀態會變得孤立。
好的,現在讓我們考慮一個非常簡單的 **閉包** 示例。
示例
請考慮以下所示的程式碼。
package main
import (
"fmt"
)
func main() {
x := 22
ff := func() {
y := x / 2
fmt.Println(y)
}
ff()
}輸出
如果我們使用命令 **go run main.go** 執行此程式碼,我們將在終端上看到以下輸出。
11
在上面的程式碼中,我們建立了一個名為 **ff** 的函式的閉包,其中包含 **x**。匿名函式 ff 可以直接訪問值 **x**,而這反過來就是 **閉包** 屬性。
閉包還提供了一個稱為資料隔離的屬性,其中閉包的狀態在建立時是唯一的,這意味著每個閉包都有自己的狀態。
讓我們藉助示例來理解此概念。
示例
請考慮以下所示的程式碼。
package main
import (
"fmt"
)
func ff() func() int {
z := 0
return func() int {
z += 100
return z
}
}
func main() {
x := ff()
y := ff()
fmt.Println(x())
fmt.Println(y())
x()
fmt.Println(x())
fmt.Println(y())
}輸出
如果我們使用命令 **go run main.go** 執行此程式碼,我們將看到以下輸出列印在終端中。
100 100 300 200
我們可以注意到上述輸出中的差異,這清楚地表明它們包含不同的狀態。
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP