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
  }
}