在线文档 > Golang练习 > 通道同步
我们可以使用通道来同步在 协程 之间的执行。下面是一个使用阻塞接收等待 协程 完成的示例。当等待多个 协程 完成时,您可能更喜欢使用 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() {
    // 启动一个 worker 协程,并给它通知的通道。
    done := make(chan bool, 1)
    go worker(done)
    // 程序将一直阻塞,直到我们从通道中接收到 worker 的通知。
    <-done
}
运行结果如下:
$ go run channel-synchronization.go      
working...done
如果从此程序中删除 <-done行,则程序将在worker启动之前退出。
