如何在 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

我們可以注意到上述輸出中的差異,這清楚地表明它們包含不同的狀態。

更新於: 2022年2月21日

385 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.