Go言語で並行に実行されるコンカレントタスクの問題を解決するには?
Go言語では、goroutineとchannelを用いて、並行タスクの並行実行という問題に対処することができます。
まず、goroutineを作成するためにキーワードgoを使い、その中で並行実行させたい処理を行う。例えば:
go func() {
// 并发执行的任务
}()
そして、チャンネルを使ってgoroutineへデータのやり取り同期ができます。チャンネルを作成し、<-記号を使ってチャンネルへデータを送信します。例:
ch := make(chan int)
go func() {
// 并发执行的任务
ch <- result // 将结果发送到channel中
}()
rangeキーワードは、チャネルからデータを読み込んで処理するために使うことができます。例えば、
for result := range ch {
// 处理结果
}
最後に、WaitGroup(sync パッケージ)を使用してすべての goroutine が実行完了するのを待つことができます。例:
var wg sync.WaitGroup
for i := 0; i < numTasks; i++ {
wg.Add(1)
go func() {
// 并发执行的任务
wg.Done()
}()
}
wg.Wait()
並行処理問題を解決するGo言語での基本的な考え方です。goroutineとchannelの組み合わせで効率的な並行プログラミングを実現します。