两个 channel
负责通知,english 负责通知打印字母的 goroutine
来打印字母,num用来通知打印数字的 goroutine
打印数字。
wait
用来等待字母打印完成后退出循环。
package main
import (
"fmt"
"strings"
"sync"
)
func main() {
var wg sync.WaitGroup
num, english := make(chan bool), make(chan bool)
str := "ABCD"
//fmt.Println(strings.Count(str[2:], ""))
go func() {
i := 1
for {
select {
case v, _ := <-num:
if !v {
wg.Done()
return
}
fmt.Println(i)
i++
english <- true
break
default:
break
}
}
}()
wg.Add(1)
go func() {
i := 0
for {
select {
case <-english:
//strings.Count “” 结束判断
//fmt.Println("判断条件", strings.Count(str, "")-1)
if i >= strings.Count(str, "")-1 {
num <- false
wg.Done()
return
}
fmt.Println(str[i : i+1])
i++
num <- true
break
default:
break
}
}
}()
num <- true
wg.Wait()
}