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)
}
}
上記コードを実行すると、同じデータを同時に処理できます。