题目:
有两个协程,协程1输出 1-10 , 协程2输出 A-J, 要求两个协程交替输出,输出示例为1 A 2 B 3 C 4 D...,输出完毕后程序结束运行。
分析:
通过channel实现两个协程间的通信,通过WaitGroup实现主协程和子协程的同步。
代码:
func main() {
chanA := make(chan struct{}, 1)
chanB := make(chan struct{}, 1)
wg := sync.WaitGroup{}
wg.Add(10)
go func() {
for i := 1; i <= 10; i++ {
<-chanA
fmt.Println(i)
chanB <- struct{}{}
}
}()
go func() {
for i := 65; i < 75; i++ {
<-chanB
fmt.Println(string(i))
chanA <- struct{}{}
wg.Done()
}
}()
chanA <- struct{}{}
wg.Wait()
}