🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
通道关闭与广播 === - 向关闭的channel发送数据,会导致panic - v,ok <-ch;ok为bool,true正常,false通道关闭 - 所有channel接收者都会在channel关闭时,立刻从阻塞等待中返回,ok = false.这个广播机制常被利用,进行多个订阅者同时发送信号 ~~~ func TestService(t *testing.T) { dataCh := make(chan int,10) var wg sync.WaitGroup wg.Add(1) go production(dataCh,&wg) wg.Add(1) go consume(dataCh,&wg) wg.Wait() } // 生产者 func production(ch chan int,wg *sync.WaitGroup) { for i:=0;i<1000;i++{ ch<-i } close(ch) wg.Done() } // 消费者 func consume(ch chan int,wg *sync.WaitGroup) { forleep: for { select { case data,ok := <-ch: if ok { fmt.Println(data) }else{ break forleep } } } wg.Done() } ~~~