go并发:用channel实现等待组
一,代码:
// 入口函数
func main() {
//无缓冲的channel
ch:=make(chan int)
go func() {
//<-ch
for i:=1; i<=5; i++ {
time.Sleep(time.Millisecond)
fmt.Println(i)
}
ch <- 0 //子协程结束前,向channel写入0
}()
go func() {
for i:=1; i<=5; i++ {
time.Sleep(time.Millisecond)
fmt.Println(i*10)
}
ch <- 0 //子协程结束前,向channel写入0
}()
//主协程中,尝试从channel读取2个元素
for i:=0;i<2;i++ {
<-ch
}
}
二,说明:
在主协程中,无法从channel对象中读取到数据时,会进入阻塞状态
三,运行效果:
$ go run main.go
1
10
20
2
3
30
40
4
5
50
浙公网安备 33010602011771号