ホームページ > バックエンド開発 > Golang > Go言語で匿名関数を定義する方法は何ですか?

Go言語で匿名関数を定義する方法は何ですか?

青灯夜游
リリース: 2023-01-06 19:37:13
オリジナル
3828 人が閲覧しました

Go言語における匿名関数の定義方法は「func(パラメータリスト)(戻りパラメータリスト){関数本体}」です。実際には、匿名関数の定義は名前のない通常の関数定義です。 。無名関数は完全に型とみなすことができ、直接代入したり、変数に代入したり、実パラメータや戻り値として使用したり、もちろん直接呼び出すこともできます。

Go言語で匿名関数を定義する方法は何ですか?

このチュートリアルの動作環境: Windows 7 システム、GO バージョン 1.18、Dell G3 コンピューター。

Go 言語は匿名関数をサポートしています。つまり、使用する必要があるときに関数を定義します。匿名関数には関数名はなく、関数本体のみがあります。関数は関数型の変数に型として割り当てることができます。匿名関数は、多くの場合、変数の形式で渡されるという名前も付けられます。これは、C 言語のコールバック関数に似ています。違いは、Go 言語では、コード内でいつでも匿名関数の定義をサポートしていることです。

匿名関数とは、関数名の定義を必要としない関数の実装方法を指します。関数宣言と、関数名のない関数本体で構成されます。以下に、匿名関数の定義方法を紹介します。匿名関数。

無名関数の定義

無名関数の定義形式は次のとおりです。

func(参数列表)(返回参数列表){
    函数体
}
ログイン後にコピー

匿名関数には名前がありません 通常の関数定義。

基本的な使い方

匿名関数は、型としてみなしたり、直接代入したり、変数に代入したり、使用したりできます。実際のパラメータとして使用するか、値を返して使用します。もちろん、直接呼び出すこともできます

1) 定義時に匿名関数を呼び出します

匿名関数は定義後に呼び出すことができます

func(data int) {
    fmt.Println("hello", data)
}(100)
ログイン後にコピー

3 行目の } の後の (100) に注目してください。これは、匿名関数が呼び出され、渡されたパラメータが 100 であることを示しています。

2) 匿名関数を変数に割り当てる

匿名関数には、次のような値を割り当てることができます。

// 将匿名函数体保存到f()中
f := func(data int) {
    fmt.Println("hello", data)
}
// 使用f()调用
f(100)
ログイン後にコピー

匿名関数は非常に多用途であり、それ自体がは、コールバック関数と操作のカプセル化を実装するために、さまざまなコンテナに簡単に保存できる値です。

匿名関数を使用する場所

コールバック関数

コールバック関数を使用する理由それを分析します。A がメイン関数であり、B がパラメータとしてメイン関数に渡されます。上の例から、メイン関数を定義するときに、関数 B のパラメータと戻り値の型のみを定義することがわかります。関数 B が定義した型を満たし、関数 A で処理できる限り、コールバック関数を使用することで main 関数の汎用性を高めることができます。平たく言えば、main 関数はインターフェイスを提供し、このインターフェイスの規則に準拠する任意の関数を使用できます。

type Callback func(a, b int) int

// 提供接口,外部随便怎么搞,只要符合规则就行
func api(x,y int, callback Callback) int {
    return callback(x, y)
}

// 回调函数,只要满足传入参数类型为int
// 并且返回值类型也是int就都可以
func add(a, b int) int {
    return a + b
}
ログイン後にコピー

クロージャ

クロージャとは何ですか? クロージャは、関数とそれに関連する参照環境で構成されるエンティティです。

func add() func(int) int {
    var b int
    return func(a int) int {
        b = b + a
        return b
    }
}

var f = add()
ログイン後にコピー

ここで f はクロージャで、f は b への参照を保存します。簡単に言うと、f には b のアドレスを指すポインタがあるため、次の結果が得られます

fmt.Println(f(1)) // 由于b初始化为0,所以输出1
fmt.Println(f(2)) // 由于上一行代码已经修改了b的值,所以输出4
ログイン後にコピー

したがって、クロージャと言うことは、変数に関連するすべてのものを処理するために関数内で匿名関数を使用することと同じです。

[関連する推奨事項: Go ビデオ チュートリアル プログラミング教育 ]

以上がGo言語で匿名関数を定義する方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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