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