Go言語でどうやって同じデータを並行処理するのか

Goで同じデータを並行処理するには、goroutineとchannelを使用します。

まず、データを処理する関数を1つ作り、データ1つを引数として受けとり、所定の処理を行います。例えば、数値の2乗を求める関数を作ることができます。

func calculateSquare(num int) int {
    return num * num
}

次に、主関数に処理済みのデータを格納するチャネルを作成する

result := make(chan int)

次に、goroutineを使って処理関数を並列に呼び出し、引数としてデータを渡し、処理後の結果をチャンネルに送信します。

for i := 0; i < 10; i++ {
    go func(num int) {
        result <- calculateSquare(num)
    }(i)
}

goroutine内で匿名関数を用いてパラメータを渡すことに留意してください。それによってデータ競合と競争状態を避けることができます。

最後に、チャンネルから処理されたデータを受け取り、表示します。

for i := 0; i < 10; i++ {
    square := <-result
    fmt.Println(square)
}

以下のコードをすべて示します。

package main

import "fmt"

func calculateSquare(num int) int {
    return num * num
}

func main() {
    result := make(chan int)

    for i := 0; i < 10; i++ {
        go func(num int) {
            result <- calculateSquare(num)
        }(i)
    }

    for i := 0; i < 10; i++ {
        square := <-result
        fmt.Println(square)
    }
}

上記コードを実行すると、同じデータを同時に処理できます。

bannerAds