October 2018
Beginner to intermediate
256 pages
3h 35m
Japanese
本章では、Go言語に備わっている並行処理をサポートする充実した機能について紹介していきます。本章を終える頃には、構文や関数、パッケージとその機能に関する理解が深まっていることでしょう。
ゴルーチンはGoのプログラムでの最も基本的な構成単位です。したがって、それが何で、どのように動作するのかを理解することは重要です。事実、すべてのGoのプログラムには最低1つのゴルーチンがあります†1。それがメインゴルーチンです。これはプロセスが開始する際に自動的に生成され起動されます。ほぼすべてのプログラムで問題解決のために遅かれ早かれゴルーチンを使うことになるでしょう。ではゴルーチンとは一体何なのでしょうか。
[†1] 訳注:一般的にはガベージコレクションやソフトウェア割り込みの待ちのためゴルーチンが自動的に立ち上がりますが、その数や種類は状況によって異なります。
単純に言えば、ゴルーチンは他のコードに対し並行に実行している関数のことです(注意:必ずしも並列ではありません!)。ゴルーチンはgoキーワードを関数呼び出しの前に置くことで簡単に起動できます。
func main() { go sayHello() // 他の処理を続ける } func sayHello() { fmt.Println("hello") }
無名関数でも動作します!次の例は先の例とまったく同じ処理を行っています。しかしながら、関数からゴルーチンを生成するかわりに、無名関数からゴルーチンを生成しています。
go func() { fmt.Println("hello") }() // ❶ // 他の処理を続ける
goキーワードを使うには無名関数を即値で呼び出さなければいけません。 ...