管道的注意事项和细节(2)|学习笔记

简介: 快速学习管道的注意事项和细节(2),使用 select 可以解决从管道取数据的阻塞问题【案例演示】我们在管道读取数据的时候要 close 管道,如果没有关闭,这个时候他会阻塞,而且会发生死锁,但有些情况如想在不想关闭的情况下也不被阻塞的话,我们就要使用 select

开发者学堂课程【Go 语言核心编程 - 面向对象、文件、单元测试、反射、TCP 编程:管道的注意事项和细节(2)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/626/detail/9763


管道的注意事项和细节(2)


一、 使用 select 可以解决从管道取数据的阻塞问题【案例演示】

建 demo02,新建一个文件 main.go

Package main

Import (

“fmt”

“time”

)

Func main()  {

//使用select可以解决从管道取数据的阻塞问题

//1,定义一个管道 10个数据int

讲解:假设有10个数字,5个字符串

Intchan := make (chan int,10)

For i: = 0;I < 10 ; i++{

Intchan <- i

}

//2,定义一个管道 5个数据 string

Stringchan := make(chan string,5)

For i := 0; i< 5; i++{

Stringchan <- “hello” + fmt . sprintf(“%d”, i)

}

讲解:放入一个字符串

//传统的方法在遍历管道时,如果不关闭会阻塞而导致 deadlock

讲解:关闭管道确实可以解决问题,但是有的时候我们在写代码的时候知道什么时候关闭是一件很难的问题,在遇到很难的代码时,关闭是一件很困难的事情,因此要学会使用新的方法。

//问题。在实际开发中,可能我们不好确定什么时候关闭该管道,

//可以使用 select 方式解决

讲解:先用一个始循环,select 的基本语法如下

select{

casev :=<-管道:语句

default:语句

Label :

For{

Select{

//注意:这里,如果 intchan 一直没有关闭,不会一直阻塞而 deadlock

//会自动到下一个 case 匹配

case v:= < - intchan:  

讲解:使用这个方法 < - intchan: 没有关闭也不会阻塞,如果取不到数据,他会自动往下走,  

fmt.printf(“从intchan读取的数据%d\n”, v)

time. Sleep(time.second)

case v := <- stringchan :

讲解:如果都取不到,就停止了。

fmt.printf(“从stringchan读取的数据%s\n”, v)

time. Sleep(time.second)

default :

fmt.printf(“都取不到了,不玩了,程序员可以加入自己的逻辑\n”, v)

//return

break

讲解:在写好代码之后,可以运行一遍,看出来的效果,

image.png

image.png我们可以看到,他都取完了。如果只在下面加一个 break,是没有用的,跳不出去。所以要在前面加一个 label,下面可以用 break,也可以用 return,这个就很厉害,。我们先来试试break有没有用,为了页面排列整齐,我们每个都给他加一个休眠,time. Sleep(time.second),同时加一个 time 包,最后运行代码,

image.png

image.png我们可以看到他在取完数据之后也没有退出,这个时候我们有两个解决方法。一种方法是这一段是一个协程,最后放一个 return,就可以。这个 return 代表这一个协程都返回到 main,不执行了,这个时候我们运行代码

image.png

我们可以看到它就在取不到的时候就退出循环,是正常的。但是如果想加入自己的逻辑也是可以的。第二种方法就是加入一个 label 和 break,但是 label 尽量不要使用,因为用的很少,但是他也能达到效果。运行代码:

image.png

可以看到运行是正常的。

讲解:break 和 return 是有区别的。如果写了 return,下面的代码是没有机会运行的,也不能写;如果使用 break,那下面的代码是可以使用的。

相关文章
|
C语言
【C语言程序设计——循环程序设计】统计海军鸣放礼炮声数量(头歌实践教学平台习题)【合集】
有A、B、C三艘军舰同时开始鸣放礼炮各21响。已知A舰每隔5秒1次,B舰每隔6秒放1次,C舰每隔7秒放1次。编程计算观众总共听到几次礼炮声。根据提示,在右侧编辑器Begin--End之间的区域内补充必要的代码。开始你的任务吧,祝你成功!
299 13
|
关系型数据库 MySQL 数据安全/隐私保护
安装mysqld
mysqld -install命令时出现install/remove of the service denied错误的原因和解决办法
138 0
|
Web App开发 前端开发 JavaScript
优秀前端开发教程:超炫的 Mobile App 3D 演示
  今天,我们想与您分享一个实验性的3D效果。它涉及到一个3D移动设备和一些移动应用程序截图。点击切换按钮时,我们将让移动设备转动并移动每个画面,使我们能看到一个分层的视图。你可能之前没见过这种应用程序演示模式,使用 CSS 来实现这样的效果是十分有趣的事情。
1105 0
|
7天前
|
人工智能 安全 API
CoPaw:5分钟部署你的 AI助理
源自阿里巴巴开源生态的个人 AI 助理——CoPaw。作为阿里倾力打造的开源力作,CoPaw 完美打通钉钉、飞书、Discord 等多平台对话通道,支持定时任务自动化。内置 PDF/Office 深度处理、新闻摘要等强大技能,更开放自定义扩展接口。坚持数据全程私有化部署,绝不上传云端,让每一位用户都能在大厂技术加持下,拥有安全、专属的智能助手。
|
10天前
|
人工智能 自然语言处理 JavaScript
2026年Windows+Ollama本地部署OpenClaw保姆级教程:本地AI Agent+阿里云上快速搭建
2026年OpenClaw凭借本地部署、私有化运行的特性,成为打造个人智能体的核心工具,而Ollama作为轻量级本地大模型管理工具,能让OpenClaw摆脱对云端大模型的依赖,实现**本地推理、数据不泄露、全流程私有化**的智能体验。本文基于Windows 11系统,从硬件环境准备、Ollama安装与模型定制、OpenClaw部署配置、技能扩展到常见问题排查,打造保姆级本地部署教程,同时补充阿里云OpenClaw(Clawdbot)快速部署步骤,兼顾本地私有化需求与云端7×24小时运行需求,文中所有代码命令均可直接复制执行,确保零基础用户也能快速搭建属于自己的本地智能体。
10847 84
|
7天前
|
人工智能 安全 JavaScript
阿里云上+本地部署OpenClaw(小龙虾)新手攻略:解锁10大必备Skills,零基础也能玩转AI助手
2026年,开源AI代理工具OpenClaw(昵称“小龙虾”)凭借“能实际做事”的核心优势,在GitHub斩获25万+星标,成为现象级AI工具。它最强大的魅力在于可扩展的Skills(技能包)系统——通过ClawHub插件市场的数百个技能,能让AI助手从简单聊天升级为处理办公、学习、日常事务的全能帮手。
6748 21
|
9天前
|
人工智能 自然语言处理 机器人
保姆级教程:Mac本地搭建OpenClaw及阿里云上1分钟部署OpenClaw+飞书集成实战指南
OpenClaw(曾用名Clawdbot、Moltbot)作为2026年最热门的开源个人AI助手平台,以“自然语言驱动自动化”为核心,支持对接飞书、Telegram等主流通讯工具,可替代人工完成文件操作、日历管理、邮件处理等重复性工作。其模块化架构适配多系统环境,既可以在Mac上本地化部署打造私人助手,也能通过阿里云实现7×24小时稳定运行,完美兼顾隐私性与便捷性。
6420 13
|
5天前
|
人工智能 JavaScript Ubuntu
5分钟上手龙虾AI!OpenClaw部署(阿里云+本地)+ 免费多模型配置保姆级教程(MiniMax、Claude、阿里云百炼)
OpenClaw(昵称“龙虾AI”)作为2026年热门的开源个人AI助手,由PSPDFKit创始人Peter Steinberger开发,核心优势在于“真正执行任务”——不仅能聊天互动,还能自动处理邮件、管理日程、订机票、写代码等,且所有数据本地处理,隐私完全可控。它支持接入MiniMax、Claude、GPT等多类大模型,兼容微信、Telegram、飞书等主流聊天工具,搭配100+可扩展技能,成为兼顾实用性与隐私性的AI工具首选。
4611 8
|
3天前
|
人工智能 JavaScript 测试技术
保姆级教程:OpenClaw阿里云及本地部署+Claude Code集成,打造全能 AI 编程助手
在AI编程工具百花齐放的2026年,Anthropic推出的Claude Code凭借72.5%的SWE-bench测试高分、25倍于GitHub Copilot的上下文窗口,成为开发者追捧的智能编程助手。但单一工具仍有局限——Claude Code擅长代码生成与审查,却缺乏灵活的部署与自动化执行能力;而OpenClaw(前身为Clawdbot)作为开源AI代理框架,能完美弥补这一短板,通过云端与本地双部署,实现“代码开发-测试-部署”全流程自动化。
1921 13