ホームページ  >  記事  >  バックエンド開発  >  golang関数型の動的作成・破棄メカニズム

golang関数型の動的作成・破棄メカニズム

王林
王林オリジナル
2024-04-28 15:12:011097ブラウズ

Go 言語は、関数値を動的に作成および破棄するための func 型を提供します。 作成: func キーワードを使用して、関数型を動的に作成します (f := func(x int) int { return x * x } など)。 Call: call(f, 5) など、関数値をパラメータとして別の関数に渡します。破棄: 関数の値は、変数と同様に、スコープの外に出ると破棄されます。

golang関数型の動的作成・破棄メカニズム

Go 言語における関数型の動的作成および破棄メカニズム

Go 言語には、組み込みの func 型が用意されており、これにより、関数値を作成して使用します。

関数タイプの動的作成

func キーワードを使用して関数タイプを動的に作成できます:

f := func(x int) int {
    return x * x
}

上記のコードは関数タイプを作成します整数の引数を受け取り、整数を返します。

関数値の動的呼び出し

関数値をパラメータとして別の関数に渡すことで、関数値を呼び出すことができます:

func call(f func(int) int, x int) {
    fmt.Println(f(x))
}

call(f, 5)

関数値を破棄します

関数値変数と同じライフサイクルを持ち、スコープ外に出ると破棄されます。

実践的なケース: コールバック関数を動的に作成する

結果を処理するために goroutine 内にコールバック関数を作成するのは一般的なシナリオです:

func main() {
    ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
    defer cancel()

    resultCh := make(chan int)

    // 创建回调函数
    f := func(result int) {
        resultCh <- result
    }

    go func() {
        // 模拟耗时的处理
        time.Sleep(5 * time.Second)
        result := 42
        f(result)
    }()

    select {
    case result := <-resultCh:
        fmt.Println("Received result:", result)
    case <-ctx.Done():
        fmt.Println("Timed out waiting for result")
    }
}

この例では、動的に作成されたコールバック関数 f は、ゴルーチンの処理完了後にメインのゴルーチンに結果を通知するために使用されます。

以上がgolang関数型の動的作成・破棄メカニズムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。