関数クロージャとゴルーチンは Go 言語で連携して、同時実行の効率的なプログラムを作成します。関数クロージャを使用すると、関数の実行が完了した後でも関数が外部変数にアクセスできるようになります。 Goroutine は、並列実行できる軽量のコルーチンです。 Goroutine で関数クロージャーを使用して、同時実行のための強力なメカニズムを提供します。例: 配列要素を並列処理し、関数クロージャを通じてゴルーチンを作成し、各要素の二乗を計算し、チャネルを通じて結果を蓄積します。
Go 言語では、関数クロージャと Goroutine は、連携して同時実行および実行を行うことができる 2 つの強力な要素です。効率的なプログラム。この記事では、関数クロージャと Goroutine コラボレーションを使用してアプリケーションのパフォーマンスと保守性を向上させる方法について説明します。
関数クロージャとは、その定義範囲外の変数にアクセスできる関数を指します。 Go では、匿名関数を作成し、それを変数に格納することで関数クロージャを作成できます。
例:
func createCounter() func() int { count := 0 return func() int { count++ return count } }
上記の関数 createCounter
は、匿名関数を返す関数クロージャを作成します。この匿名関数は、createCounter
関数が完了した後でも、外部変数 count
にアクセスして変更できます。
Goroutine は、Go 言語の軽量の同時実行ユニットです。これらは本質的にコルーチンであり、メインスレッドをブロックすることなく並列実行できます。ゴルーチンは、go
キーワードを使用して作成できます。
例:
go func() { for i := 0; i < 10; i++ { // 在 Goroutine 中执行的操作 } }
Goroutine を関数クロージャーとともに使用すると、同時実行のための強力なメカニズムを作成できます。
以下は、関数クロージャとGoroutineコラボレーションの使用法を示す実践的なケースです:
// 并行处理数组元素 func parallelSum(arr []int) int { // 创建一个通道来接收各个 Goroutine 的结果 resCh := make(chan int) // 遍历数组元素并为每个元素创建一个 Goroutine for _, num := range arr { go func(n int) { // 计算元素的平方,并将其发送到通道 resCh <- n * n }(num) } // 初始化 sum 变量并等待各个 Goroutine 完成 sum := 0 for i := 0; i < len(arr); i++ { sum += <-resCh } // 返回平方元素的总和 return sum }
上記の例では、ParallelSum
関数は整数の配列を受け取り、各要素の二乗を並行して計算します。関数クロージャは、単一要素の二乗を計算してチャネルに送信するゴルーチンを作成するために使用されます。メインのゴルーチンは、すべてのゴルーチンが完了して結果を蓄積するのを待ってから、最終的な合計を返します。
関数クロージャとゴルーチンを活用することで、メインスレッドをブロックすることなく、並列計算を迅速かつ効率的に実行できます。これにより、コードのパフォーマンスと応答性が大幅に向上します。
以上がgolang 関数クロージャーと goroutine の連携の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。