当前位置: 首页 > wzjs >正文

做的网站网站提交收录

做的网站,网站提交收录,网站用什么语言,网络营销策略定义前言 在 Go 语言中,goroutine 是轻量级的并发执行单元,它使得我们能够非常方便地实现并发编程。本文将通过一个经典的案例 —— 使用两个 goroutine 交替打印数字和字母,来演示如何利用 channel 控制 goroutine 的执行顺序,并加深…

前言

在 Go 语言中,goroutine 是轻量级的并发执行单元,它使得我们能够非常方便地实现并发编程。本文将通过一个经典的案例 —— 使用两个 goroutine 交替打印数字和字母,来演示如何利用 channel 控制 goroutine 的执行顺序,并加深对 Go 并发模型的理解。

🎯 题目描述

编写一个 Go 程序,使用两个 goroutine:

一个 goroutine 打印数字 1~26;
另一个 goroutine 打印字母 ‘A’~‘Z’;
要求输出结果为:
深色版本
1 2 A 3 4 B 5 6 C … 25 26 Z
即每打印两个数字后打印一个字母,形成交错输出的效果。

🧠 解题思路

要实现两个 goroutine 按照一定顺序交替执行,关键在于控制执行流程。我们可以借助 Go 的 channel 实现同步通信机制:

使用两个 channel:numChan 和 letterChan,分别用于通知打印数字和字母;
主 goroutine 控制初始信号;
每个 goroutine 打印完相应内容后发送下一个 goroutine 的信号;
使用计数器控制循环结束。

✅ 完整代码实现

package mainimport ("fmt""time"
)func main() {numChan := make(chan struct{})letterChan := make(chan struct{})done := make(chan struct{})// 数字 goroutinego func() {for i := 1; i <= 26; i += 2 {// 等待打印两个数字的信号<-numChan// 打印两个数字fmt.Printf("%d %d ", i, i+1)// 发送打印字母的信号letterChan <- struct{}{}}close(letterChan)done <- struct{}{}}()// 字母 goroutinego func() {for ch := 'A'; ch <= 'Z'; ch++ {// 等待打印字母的信号<-letterChan// 打印一个字母fmt.Printf("%c ", ch)// 如果还没到结尾,通知继续打印下一组数字if ch != 'Z' {numChan <- struct{}{}} else {done <- struct{}{}}}}()// 启动第一个信号numChan <- struct{}{}// 等待所有任务完成<-done<-donefmt.Println("\n程序结束")
}

🔍 运行结果示例

1 2 A 3 4 B 5 6 C 7 8 D 9 10 E 11 12 F 13 14 G 15 16 H 17 18 I 19 20 J 21 22 K 23 24 L 25 26 Z

程序结束

🛠️ 代码解析

  1. Channel 的作用
    numChan: 控制是否可以打印数字(初始由主 goroutine 触发);
    letterChan: 控制是否可以打印字母;
    done: 用于主 goroutine 等待子 goroutine 结束。
  2. 执行流程
    主 goroutine 发送第一个信号给 numChan,启动数字打印;
    数字 goroutine 打印两个数字后,发送信号给 letterChan;
    字母 goroutine 收到信号后打印一个字母,并再发送信号给 numChan;
    循环往复,直到全部数据打印完毕;
    最终主 goroutine 接收到 done 信号,程序退出。

🧪 小技巧

在实际开发中,可以通过 time.Sleep() 模拟延迟,观察 goroutine 执行顺序;
如果希望更清晰地看到输出,可以在打印语句中加入换行或空格;
使用 sync.WaitGroup 替代 done channel 也是常见做法。

📚 扩展练习建议

使用 WaitGroup 替代 done channel;
修改题目要求为:打印一次数字后打印两次字母;
尝试使用 context.Context 控制 goroutine 的取消操作;
封装成函数,支持任意数量的交替规则;

📝 总结

通过这个小例子,我们学习了以下 Go 并发编程的核心知识点:

技术点应用场景说明
Goroutine并发执行多个任务
Channel协调 goroutine 之间的执行顺序
主 goroutine 等待确保程序不会提前退出
http://www.dtcms.com/wzjs/486990.html

相关文章:

  • 电商 网站建设文字抖音关键词排名系统
  • 培训销售网站建设seo网络营销推广公司深圳
  • 广州手机网站开发报价万网官网登录
  • 河北做网站公司seo优化行业
  • 网站建设昆明哪家好seo排名优化软件有用
  • 铁岭公司做网站微信加人推码35一单
  • 网站建设郑州公司搜索引擎推广是什么意思
  • 门户网站网站开发网络宣传怎么做
  • 网站建设窗口框架seo优化设计
  • psd做网站切片成都seo招聘
  • 福建企业年报网上申报入口石家庄seo优化
  • 广西钦州有人帮做网站的公司吗杭州网站推广大全
  • 网站导航排版布局关键词seo服务
  • 微网站开发用什么软件小说网站排名免费
  • 新白鹿网络营销方式抖音seo排名软件哪个好
  • mip 网站女教师遭网课入侵视频
  • 安庆做网站公司自己开网站怎么开
  • 做网站需要做哪些东西新冠疫情最新情况最新消息
  • 网站的构成元素长春视频剪辑培训机构
  • 中和阗盛工程建设有限公司网站广州疫情已经达峰
  • 快速搭建网站软件西安竞价托管
  • 推荐网站在线看兄弟们八宿县网站seo优化排名
  • 宁波白云医院网站建设免费发布网站seo外链
  • 光明新区住房和建设局 官方网站湖北seo服务
  • 中山网站制作建设爱站网注册人查询
  • 404 wordpress百度seo搜搜
  • 网站建设b2c成都疫情最新情况
  • 用dw做的网站怎么上传图片免费外链网站seo发布
  • 刚做优化的网站什么能更新企业网站优化服务公司
  • 微信网站开发合同seo优化运营