用go实现写两个协程,一个协程打印1-52,另一个协程打印A-Z,打印顺序为12A34B56C.....5152Z
时间: 2024-03-22 20:08:10 浏览: 192
要实现这个需求,我们可以利用两个通道来进行协程之间的同步。一个协程负责打印数字,另一个协程负责打印字母,然后通过通道来交替控制它们的执行顺序。以下是一个示例代码:
```go
package main
import (
"fmt"
"sync"
)
func printNumbers(chNum chan bool, chAlpha chan bool, wg *sync.WaitGroup) {
defer wg.Done()
for i := 1; i <= 52; i += 2 {
<-chNum // 等待字母协程打印完毕
fmt.Printf("%d%d", i, i+1)
chAlpha <- true // 通知字母协程可以开始打印
}
}
func printLetters(chNum chan bool, chAlpha chan bool, wg *sync.WaitGroup) {
defer wg.Done()
for i := 'A'; i <= 'Z'; i++ {
<-chAlpha // 等待数字协程打印完毕
fmt.Printf("%c", i)
chNum <- true // 通知数字协程可以开始打印
}
}
func main() {
chNum := make(chan bool) // 数字协程通道
chAlpha := make(chan bool) // 字母协程通道
var wg sync.WaitGroup
wg.Add(2)
go printNumbers(chNum, chAlpha, &wg)
go printLetters(chNum, chAlpha, &wg)
chNum <- true // 通知数字协程可以开始打印
wg.Wait()
fmt.Println()
}
```
在这个示例代码中,我们创建了两个通道`chNum`和`chAlpha`,分别用于数字协程和字母协程之间的同步。然后使用`sync.WaitGroup`来等待协程的完成。
通过交替地在协程之间发送和接收消息,我们可以实现数字和字母的交替输出。数字协程先打印1-52中的奇数,然后等待字母协程打印完毕后再继续打印下一个数字。字母协程负责打印A-Z,然后等待数字协程打印完毕后再继续打印下一个字母。
最终的输出结果将会按照1-52和A-Z的顺序交替打印,符合题目要求。
阅读全文