Go交叉打印

package main
import (
"fmt"
"sync"
)
var wg sync.WaitGroup
var number, letter = make(chan bool, 1), make(chan bool, 1)
func printInt() {
defer wg.Done()
i := 1
for {
_, ok := <-number
if !ok {
close(letter)
return
}
fmt.Printf("%d%d", i, i+1)
i += 2
letter <- true
}
}
func printLetter() {
defer wg.Done()
l := 'A'
for {
_, _ = <-letter
if l > 'Z' {
close(number)
return
}
fmt.Printf("%c%c", l, l+1)
l += 2
number <- true
}
}
func AllInOne() {
defer wg.Done()
var i = 1
var l = 'A'
for {
select {
case _, ok := <-number:
if i > 28 || !ok {
close(letter)
return
}
fmt.Printf("%d%d", i, i+1)
i += 2
letter <- true
case _, ok := <-letter:
if !ok || l > 'Z' {
close(number)
return
}
fmt.Printf("%c%c", l, l+1)
l += 2
number <- true
default:
}
}
}
func main() {
wg.Add(1)
go AllInOne()
// go printInt()
// go printLetter()
number <- true
wg.Wait()
}
posted @   liy36  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示