オープンソース プロジェクトと、golang の匿名関数とクロージャのリソース共有

王林
リリース: 2024-05-04 22:15:01
オリジナル
316 人が閲覧しました

匿名関数とクロージャ: 匿名関数は、特定のタスクを実行するためにオンザフライで作成される名前のない関数です。クロージャは、匿名関数内の外部変数へのアクセスを可能にする変数です。 Go では、func() 構文を使用して宣言されます。匿名関数とクロージャは、引数の受け渡し、変数への格納、または実際にはスライスの順序付けやイベント処理に使用できます。

オープンソース プロジェクトと、golang の匿名関数とクロージャのリソース共有

#Go の匿名関数とクロージャ

はじめに

匿名関数は関数ですGo では、明示的に名前が付けられておらず、式として使用できるものは、1 回限りのタスクまたはコールバックを作成するために使用されます。クロージャは、関数が戻った後も存続する外部変数への参照を含む匿名関数です。

匿名関数

匿名関数を宣言するには、

func() 構文を使用します。

func() {
    fmt.Println("这是一个匿名函数")
}
ログイン後にコピー

匿名関数は次のように渡すことができます。他の関数へのパラメータも変数に格納できます。

func callAnon(anon func()) {
    anon()
}

var anonFunc = func() {
    fmt.Println("这是一个存储在变量中的匿名函数")
}
ログイン後にコピー

クロージャ

クロージャを使用すると、匿名関数が外部スコープ内の変数にアクセスできるようになります。これらの変数はクロージャ変数と呼ばれます。

var x = 10

anon := func() {
    fmt.Println(x)  // 访问闭包变量
}

anon()  // 输出:10
ログイン後にコピー

実際的なケース

  • スライスの並べ替え: クロージャを使用してフィールド値でスライスを並べ替えます:
  • type Employee struct {
        Name string
        Age  int
    }
    
    func SortEmployeesByAge(employees []Employee) {
        sort.Slice(employees, func(i, j int) bool {
            return employees[i].Age < employees[j].Age
        })
    }
    ログイン後にコピー
  • イベント ハンドラー: レシーバー関数を作成し、匿名関数をコールバックとして指定します:
  • type Button struct {
        onClick func()
    }
    
    func (b *Button) AddClickListener(f func()) {
        b.onClick = f
    }
    ログイン後にコピー

    オープン ソース プロジェクトとリソース

    #[Go wiki: 匿名関数とクロージャ](https://go.dev/blog/closures)
    • [実用的な Go チュートリアル: クロージャ](https://go. dev/blog/closures)
    • [Golang の匿名関数とクロージャ](https://www.jianshu.com/p/8e78029d888a)

    以上がオープンソース プロジェクトと、golang の匿名関数とクロージャのリソース共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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