要求:
- 并发两协程交替打印数字和字母。
- 一个协程打印数字,一个协程打印字母。
输出:
12AB34CD56EF78GH910IJ1112KL1314MN1516OP1718QR1920ST2122UV2324WX2526YZ2728
思路:
- 两个
channel
控制两个协程进行交替打印。 sync.WaitGroup
控制主协程等待子协程完成。
完整代码:
package main
import (
"fmt"
"sync"
)
func main() {
letter, number := make(chan bool), make(chan bool)
wait := sync.WaitGroup{}
go func() {
i := 1
for {
select {
case <-number:
fmt.Print(i)
i++
fmt.Print(i)
i++
letter <- true
}
}
}()
wait.Add(1)
go func() {
i := 'A'
for {
select {
case <-letter:
if i >= 'Z' {
wait.Done()
return
}
fmt.Print(string(i))
i++
fmt.Print(string(i))
i++
number <- true
}
}
}()
fmt.Println("程序先执行此句输出。")
number <- true
wait.Wait()
fmt.Println("\n程序最后执行此句输出。")
}