来源:https://github.com/xg-wang/gobyexample/tree/master/examples
//我们可以使用通道来同步Go协程间的执行状态。这里是一个通过使用
//阻塞的接收方式来等待一个Go协程的运行结束
package main
import (
"fmt"
"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
//如果移除此段代码,程序甚至会在`worker`还没有开始运行就结束了
}
输出结果:
working...done