Goによるサンプル: チャネルの同期

ゴーリテㇽイン間の実行を同期するには、チャネルを使用できます。次に、ブロッキング受信を使用してゴーリテㇽインの終了を待機する例を示します。複数のゴーリテㇽインの終了を待機するには、WaitGroupを使用する方がよいかもしれません。

package main
import (
    "fmt"
    "time"
)

これがゴーリテㇽインで実行する関数です。doneチャネルを使用して、この関数の作業が完了したことを別のゴーリテㇽインに通知します。

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                  

このプログラムから<- done行を削除すると、workerが開始される前にプログラムは終了します。

次の例: チャネルの方向.