チャネルを使ってゴルーチン間を同期できる。 この例では、ゴルーチンが処理を終えるのを待つために、受信がブロックされることを利用する。 複数のゴルーチンが処理を終えるのを待つときは WaitGroup を使う方が好ましいだろう。 |
|
![]() ![]() package main
|
|
import (
"fmt"
"time"
)
|
|
この関数をゴルーチンで実行する。
|
func worker(done chan bool) {
fmt.Print("working...")
time.Sleep(time.Second)
fmt.Println("done")
|
終わったことを知らせるために値を送信する |
done <- true
}
|
通知用のチャネルを渡してゴルーチンを起動する。 |
func main() {
|
done := make(chan bool, 1)
go worker(done)
|
|
ワーカーからこのチャネルに通知が届くまでブロックされる。 |
<-done
}
|
$ go run channel-synchronization.go
working...done
|
|
このプログラムから |