channel
ready := make(chan struct{})
<-readyclose(ready)<-readychannel
等待完成
done := make(chan struct{})
go func() {
doA()
close(done)
}()
// 等待A完成
<-done
同时启动
start := make(chan struct{})
for i := 0; i < 10000; i++ {
go func() {
<-start // wait for the start channel to be closed
doWork(i) // do something
}()
}
//这时候所有阻塞的协程都可以继续运行
close(start)
暂停
loop:
for {
select {
case m := <-email:
sendEmail(m)
case <-stop: // triggered when the stop channel is closed
break loop // exit
}
}