交替打印数字和字母
约 213 字小于 1 分钟
2024-12-02
问题描述
使用两个 goroutine 交替打印序列,一个 goroutine 打印数字, 另外一个 goroutine 打印字母, 最终效果如下:
A1B2C3D4E5F6G7H8I9J10K11L12M13N14O15P16Q17R18S19T20U21V22W23X24Y25Z26
解题思路
问题很简单,使用 channel 来控制打印的进度。使用两个 channel ,来分别控制数字和字母的打印序列, 数字打印完成后通过 channel 通知字母打印, 字母打印完成后通知数字打印,然后周而复始的工作。
源码参考
package main
import (
"fmt"
"sync"
)
func main() {
letter, number := make(chan bool), make(chan bool)
wg := sync.WaitGroup{}
defer fmt.Println()
defer wg.Wait()
wg.Add(2)
go func(wg *sync.WaitGroup) {
i := 1
for {
select {
case b := <-letter:
if !b {
wg.Done()
return
}
fmt.Print(i)
i++
number <- true
}
}
}(&wg)
go func(wg *sync.WaitGroup) {
i := 'A'
for {
select {
case <-number:
if i > 'Z' {
letter <- false
wg.Done()
return
}
fmt.Print(string(i))
i++
letter <- true
}
}
}(&wg)
number <- true
}