ゴルーチン (goroutine) は、軽量スレッドです。 |
|
package main |
|
import ( "fmt" "time" ) |
|
func f(from string) { for i := 0; i < 3; i++ { fmt.Println(from, ":", i) } } |
|
func main() { |
|
関数呼び出し |
f("direct") |
この関数をゴルーチンとして呼び出すには、
|
go f("goroutine") |
無名関数に対してゴルーチンを開始することもできます。 |
go func(msg string) { fmt.Println(msg) }("going") |
上の 2 つの関数呼び出しは別々のゴルーチンで非同期に 実行されるので、プログラムの実行はすぐにここへきます。 それらが完了するまで待ちます(より堅牢な方法としては、 WaitGroup を使ってください)。 |
time.Sleep(time.Second) fmt.Println("done") } |
このプログラムを実行すると、最初に同期呼び出しの出力、 その次に 2 つのゴルーチンの出力を確認できます。 ゴルーチンは Go ランタイムによって並行実行されるため、 これらの出力は交互になる可能性があります。 |
$ go run goroutines.go direct : 0 direct : 1 direct : 2 goroutine : 0 going goroutine : 1 goroutine : 2 done |
次回は、Go の並行プログラムを補完するチャネルを見ていきます。 |
Next example: Channels.