005 Golang-channel-practice 打印ABC

第五题 顺序打印ABC

依然是,一个协程打印A,一个协程打印B,一个协程打印C。按照上一题左右括号的例子,我们来试一下这题~

直接上代码:

package main
import (
    "fmt"
    "sync"
)
func main() {
    for {
       times := 1
       c := make(chan struct{})
       d := make(chan struct{})
       var wg sync.WaitGroup
       wg.Add(1)
       go printA(c, times)
       go printB(c, &wg, d)
       go printC(d, &wg)
       wg.Wait()
    }
}
func printA(c chan struct{}, times int) {
    defer close(c)
    for i := 0; i < times; i++ {
       fmt.Print("A")
       c <- struct{}{}
    }
}
func printB(c chan struct{}, wg *sync.WaitGroup, d chan struct{}) {
    for range c {
       fmt.Print("B")
       d <- struct{}{}
    }
    close(d)
}
func printC(d chan struct{}, wg *sync.WaitGroup) {
    defer wg.Done()
    for range d {
       fmt.Print("C")
    }
}

 

 

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值