Dev Study
Go コース

45. goroutine — go キーワードで並行実行

goroutine は Go のランタイムが管理する軽量なスレッドです。関数呼び出しの前に go キーワードを付けるだけで、その関数は新しい goroutine として並行に実行され、呼び出し側はその完了を待たずに次の行へ進みます。OS スレッドより圧倒的に軽いため、何千・何万と起動しても問題ありません。

ただし main 関数(メインの goroutine)が終了すると、まだ動いている他の goroutine は道連れに終了してしまいます。そのため起動しっぱなしにすると、出力が出る前にプログラムが終わってしまうことがあります。完了を待つ仕組みが必要です。

もっとも基本的な待ち方が sync.WaitGroup です。Add で待つ数を登録し、各 goroutine が終わるときに Done を呼び、Wait で全部の完了をブロックして待ちます。下の例は WaitGroup でカウンタを集計するので、毎回同じ合計が出ます。

▶ サンプルコードを実行してみよう(自由に書き換えてOK)

Go
公式ドキュメントで詳しく ↗