是的,Go 中的匿名函數可用於快速定義一次性函數或立即執行函數,而閉包則用於將局部變數封鎖在匿名函數中,即使後者返回也能存取這些變數。
#匿名函數是在不定義函數名稱的情況下直接定義的函數。它們通常用於定義一次性函數,或需要立即執行的函數。 語法:
func() { // 函数体 }
閉包是一種將局部變數「封鎖」在匿名函數中,即使在匿名函數返回後也能存取局部變數的技術。這可以透過將匿名函數作為其他函數或方法的返回值來實現。 語法:
func makeCounter() func() int { count := 0 return func() int { count++ return count } }
以下程式碼使用匿名函數和閉包產生一個產生隨機數的函數:
package main import ( "fmt" "math/rand" "time" ) func main() { // 创建一个匿名函数,生成一个随机数 randomFunc := func() int { rand.Seed(time.Now().UnixNano()) return rand.Intn(100) } // 将匿名函数包装在一个闭包中,封锁随机数生成器 getRand := func(r func() int) func() int { return func() int { return r() } }(randomFunc) // 生成 10 个随机数并打印 for i := 0; i < 10; i++ { fmt.Println(getRand()) } }
輸出:
32 78 15 64 12 99 17 42 5 37
以上是golang匿名函式及閉包原理解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!