Go の並行処理

10 views 14 Jan 2026
Go の最大の特徴は、軽量な並行処理の仕組みである goroutine です。関数の前に `go` キーワードをつけるだけで、そ...
10 views 14 Jan 2026
goroutine 同士でデータをやり取りするには channel を使います。channel は goroutine 間の通信...
12 views 14 Jan 2026
channel には「もうこれ以上送信しない」ことを伝える仕組みがあります。`close` です。close された chann...
10 views 14 Jan 2026
複数の channel からデータを受信したいとき、どの channel から先にデータが届くかわからないことがあります。そんな...
11 views 14 Jan 2026
複数の goroutine を起動したとき、すべてが終わるまで待ちたいことがあります。channel でも実現できますが、`sy...
10 views 14 Jan 2026
複数の goroutine から同じ変数を読み書きすると、データ競合(data race)が起きることがあります。これを防ぐのが...
6 views 14 Jan 2026
大量のタスクを処理するとき、タスクごとに goroutine を起動すると数が膨大になることがあります。ワーカープールは、決まっ...
9 views 27 Jan 2026
並行処理を行う際、goroutine をいつ終了させるかは重要な問題です。Go の `context` パッケージは、キャンセル...
7 views 27 Jan 2026
channel を作成する際、バッファサイズを指定することで「バッファ付き channel」を作れます。バッファなしの chan...
9 views 27 Jan 2026
`sync.Mutex` は排他制御に使いますが、読み取りが多く書き込みが少ない場面では非効率です。`sync.RWMutex`...
13 views 27 Jan 2026
Mutex によるロックは安全ですが、オーバーヘッドがあります。単純なカウンタの増減など、基本的な操作だけならロックなしで安全に...
11 views 28 Jan 2026
アプリケーションの初期化処理は一度だけ実行したいものです。データベース接続の確立、設定ファイルの読み込み、シングルトンの生成など...
10 views 28 Jan 2026
複数の goroutine を起動して、どれか 1 つでもエラーが発生したら全体を中断したい場面は多いです。標準の `sync....
7 views 29 Jan 2026
並行処理ではデータ競合(race condition)が厄介なバグの原因になります。Go には `-race` フラグで実行時に...
12 views 29 Jan 2026
並行処理のパターンとして「fan-out / fan-in」があります。fan-out は 1 つの入力を複数の gorouti...
10 views 29 Jan 2026
パイプライン処理は、データを複数のステージに分けて流し、各ステージを goroutine で並行に実行するパターンです。Unix...
5 views 05 Feb 2026
sync.Cond は、ある条件が満たされるまで goroutine を待機させ、条件が整ったら通知して再開させる仕組みを提供し...
6 views 05 Feb 2026
sync.Pool は、一時的なオブジェクトを再利用するための仕組みです。頻繁にオブジェクトを生成・破棄する処理では、Pool ...
9 views 07 Feb 2026
sync.Map は、複数の goroutine から安全にアクセスできる並行安全なマップです。通常の map は並行アクセスに...
9 views 07 Feb 2026
Go の channel は、送信専用や受信専用に型を制限できます。関数の引数で方向を指定することで、意図しない操作を防ぎ、コー...
6 views 07 Feb 2026
channel からの受信を待つ処理で、一定時間内に応答がなければ諦めたいことがあります。`select` と `time.Af...
5 views 08 Feb 2026
`time.Ticker` は一定間隔で値を送信し続ける channel を提供します。定期的なポーリング、ヘルスチェック、メト...