Go实现交替打印数字和字⺟
Posted Demonwuwen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go实现交替打印数字和字⺟相关的知识,希望对你有一定的参考价值。
问题描述
使⽤两个 goroutine 交替打印序列,⼀个 goroutine 打印数字, 另外⼀个 goroutine 打印字⺟, 最终效果如下:
12AB34CD56EF78GH910IJ1112KL1314MN1516OP1718QR1920ST2122UV2324WX2526YZ2728
解题思路
使⽤ channel 来控制打印的进度。使⽤两个 channel ,来分别控制数字和字⺟的打印序列, 数字打印完成后通过 channel 通知字⺟打印, 字⺟打印完成后通知数字打印,然后周⽽复始的⼯作。
package main
import (
"fmt"
"strings"
"sync"
)
func main() {
number, letter := make(chan bool), make(chan bool)
wait := sync.WaitGroup{}
go func() {
i := 1
for {
select {
case <-number:
fmt.Printf("%d%d",i,i+1)
i+=2
letter <- true //通知该打印字母
default:
break
}
}
}()
wait.Add(1)
go func(wait *sync.WaitGroup) {
str := "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
i:=0
for {
select {
case <-letter:
if i>= strings.Count(str,"")-1{ //循环截止条件
wait.Done()
return
}
fmt.Print(str[i:i+2])
i = i+2
number<-true //通知该打印数字
default:
break
}
}
}(&wait)
number<-true
wait.Wait()
}
//运行结果
12AB34CD56EF78GH910IJ1112KL1314MN1516OP1718QR1920ST2122UV2324WX2526YZ2728
以上是关于Go实现交替打印数字和字⺟的主要内容,如果未能解决你的问题,请参考以下文章