來源:https://github.com/xg-wang/gobyexample/tree/master/examples
//我們可以使用通道來同步Go協(xié)程間的執(zhí)行狀態(tài)。這里是一個通過使用
//阻塞的接收方式來等待一個Go協(xié)程的運行結束
package main
import (
"fmt"
"time"
)
//這是一個我們將要在 Go 協(xié)程中運行的函數。`done`通道
//將被用于通知其他 Go 協(xié)程這個函數已經工作完畢
func worker(done chan bool) {
fmt.Print("working...")
time.Sleep(time.Second)
fmt.Println("done")
//發(fā)送一個值來通知我們已經完工了
done <- true
}
func main() {
//運行一個worker Go 協(xié)程,并給予用于通知的通道
done := make(chan bool, 1)
go worker(done)
// 程序將在接收到通道中worker發(fā)出的通知前一直阻塞
<-done
//如果移除此段代碼,程序甚至會在`worker`還沒有開始運行就結束了
}
輸出結果:
working...done