Golang 面试题(3) 两个协程轮流打印字母和数字

本文介绍了Golang面试中的一道编程题,要求实现两个协程轮流打印从A到Z的字母和1到26的数字。提供了使用有缓冲和无缓冲chan的两种解决方案,通过协程的协调完成字母与数字的交替输出。
摘要由CSDN通过智能技术生成

Golang面试编程题3

实现两个协程轮流输出A 1 B 2 C 3 .... Z 26

方案1:有缓冲的chan

func ChannelFunc() {
	// 思想:两个g,一个输出数字,一个输出字母,重点是如何控制两个g的打印顺序,让其可以轮流打印

	// 分别使用两个缓存为1的chan,来控制两个g的打印顺序
	strChan := make(chan int, 1)
	numChan := make(chan int, 1)

	strChan <- 0 // 先往字符chan中塞入,此时strChan再塞入会堵塞

	// 负责打印字母
	go func() {
		for i := 65; i <= 90; i++ {
			<-strChan // strChan取出,因为之前先塞入了,所以此处不会堵塞,会直接打印字符A..Z
			fmt.Printf("%v ", string(rune(i))) // 打印字母
			numChan <- i // numChan 塞入,塞入后,另一个g的numChan取出操作才能进行
		}
		return
	}()

  // 负责打印数字
	go func() {
		for i := 1; i <= 26; i++ {
			<-numChan // 一直阻塞,直到字母被打印,这样每次数字都是在字母后面被打印的
			fmt.Printf("%v ", i) /// 打印数字
			
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值