複数のゴルーチンの完了を待つために、WaitGroup を使うことができます。 |
|
|
|
|
|
これは、すべてのゴルーチンで実行する関数です。 |
|
時間のかかるタスクをシミュレートするためにスリープします。 |
|
|
|
この WaitGroup は、ここで起動したすべてのゴルーチンが完了するのを 待つために使われます。WaitGroup を関数に引数として渡す場合は、 ポインタで 渡す必要がある点に注意してください。 |
|
いくつかのゴルーチンを起動し、そのたびに WaitGroup のカウンターを インクリメントします。 |
|
クロージャでワーカー呼び出しをラップし、ワーカーが完了したことを WaitGroup に伝えます。こうすると、ワーカー自身は並行処理のことを 意識する必要がなくなります。 |
|
WaitGroup のカウンターが 0 に戻るまで(つまり、すべてのワーカーが 完了したと通知してくるまで)ブロックします。 |
|
このアプローチは、ワーカーからエラーを簡単に伝える方法がない点に 注意してください。より発展的なユースケースのためには、 errgroup パッケージ の利用を検討してください。 |
|
|
|
ワーカーが起動および終了する順序は、実行するたびに変わりえます。 |
Next example: Rate Limiting.