概念簡介
我們可以使用通道來同步 Go語言 協程間的執行狀態。這裏是一個
使用阻塞的接受方式來等待一個 Go 協程的運行結束的例子。
例程代碼
package main
import "fmt"
import "time"
// 這是一個我們將要在 Go 協程中運行的函數。`done` 通道
// 將被用於通知其他 Go 協程這個函數已經工作完畢。
func worker(done chan bool) {
fmt.Print("working...")
time.Sleep(time.Second)
fmt.Println("done")
// 發送一個值來通知我們已經完工啦。
done <- true
}
func main() {
// 運行一個 worker Go協程,並給予用於通知的通道。
done := make(chan bool, 1)
go worker(done)
// 程序將在接收到通道中 worker 發出的通知前一直阻塞。
<-done
}
執行&輸出
$ go run channel-synchronization.go
working...done
# 如果你把 `<- done` 這行代碼從程序中移除,程序甚至會在 `worker`
# 還沒開始運行時就結束了。
課程導航
學習上一篇:Go語言教程:通道緩衝 學習下一篇:Go語言教程:通道方向
相關資料
本例程github源代碼:https://github.com/xg-wang/gobyexample/tree/master/examples/channel-synchronization