channel を使うと、オペレータ <- を使って goroutine 間で値の送受信ができます。channel にはどういう型の値を扱うのか、キューをいくつ設けるかを指定することができます。マルチスレッドプログラミングの難点である排他制御や同期化を、簡単な構文で容易に実現できます。 goroutine とスレッド まずはスレッドとの違いについて考えてみましょう。FAQ に Why goroutines instead of threads? という質問がありますが、要約すると「OS のシステムスレッドよりも小さなメモリ使用量で済む」と書いてあるように見えます。実際、スレッドのデフォルトスタックサイズは Windows だと 1 MB、Linux だと 2 MB なので、数キロバイトで済む goroutine に比べると、10 KB だとしても 100 〜 200 倍の違いがあります。