はい、Go の匿名関数を使用すると、1 回限りの関数やすぐに実行される関数を簡単に定義できます。一方、クロージャは匿名関数内のローカル変数をブロックするために使用され、後者が戻った場合でもこれらの変数にアクセスできるようにします。 。
匿名関数とは、関数名を定義せずに直接定義される関数です。これらは、1 回限りの関数、またはすぐに実行する必要がある関数を定義するためによく使用されます。 構文:
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 中国語 Web サイトの他の関連記事を参照してください。