ホームページ > バックエンド開発 > Golang > Golang の匿名関数と閉包原理の分析

Golang の匿名関数と閉包原理の分析

WBOY
リリース: 2024-05-03 10:12:02
オリジナル
533 人が閲覧しました

はい、Go の匿名関数を使用すると、1 回限りの関数やすぐに実行される関数を簡単に定義できます。一方、クロージャは匿名関数内のローカル変数をブロックするために使用され、後者が戻った場合でもこれらの変数にアクセスできるようにします。 。

Golang の匿名関数と閉包原理の分析

Go の匿名関数とクロージャについて理解する

匿名関数とは、関数名を定義せずに直接定義される関数です。これらは、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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート