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

加快政府网站建设友情链接交换平台

加快政府网站建设,友情链接交换平台,茶叶企业网站建设,想做游戏代理去哪里找🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 📗概念 在 Go 语言中,通道(channel)的关闭是一个重要…

挪威特罗姆瑟夜景

🌈Don’t worry , just coding!
内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。

📗概念

在 Go 语言中,通道(channel)的关闭是一个重要的概念,允许发送者通知接收者不再发送任何值。关闭通道可以帮助避免死锁,并使接收者能够知道何时所有数据都已被处理。

💻代码

通道关闭

package mainimport "fmt"func main() {jobs := make(chan int, 5) // 创建一个容量为 5 的整型通道 jobsdone := make(chan bool)   // 创建一个布尔类型的通道 done// 启动一个 goroutine 来处理 jobs 通道中的任务go func() {for {//从 jobs 通道接收任务。如果通道关闭且没有更多数据,more 将为 false。j, more := <-jobs // 尝试从 jobs 通道接收任务if more {         // 如果成功接收任务fmt.Println("received job", j)} else { // 如果通道已关闭且没有更多的任务fmt.Println("received all jobs")done <- true // 向 done 通道发送信号,表示所有任务已处理完成//主 goroutine 等待 goroutine 完成所有任务处理。当 goroutine 向 done 通道发送信号后,主 goroutine 将继续执行。return // 退出 goroutine}}}()// 向 jobs 通道发送任务for j := 1; j <= 3; j++ {jobs <- jfmt.Println("sent job", j)}close(jobs) // 关闭 jobs 通道,表示不再发送更多任务fmt.Println("sent all jobs")<-done // 等待 goroutine 完成所有任务// 尝试从 jobs 通道接收更多任务_, ok := <-jobsfmt.Println("received more jobs:", ok)
}
//输出
//sent job 1
//sent job 2
//sent job 3
//sent all jobs
//received job 1
//received job 2
//received job 3
//received all jobs
//received more jobs: false

🔍理解

  • go中关闭通道的语法:close(myChannel)
  • 一旦通道被关闭,任何后续的发送操作都会引发panic。
  • 只由发送者关闭通道:通常,只有发送通道的 goroutine 应该关闭通道。接收者不应该关闭通道,因为这可能会导致其他 goroutine 在尝试发送时发生panic。
  • 避免重复关闭:关闭已关闭的通道会导致恐慌,因此在关闭通道之前,确保它未被关闭
  • 使用 range 处理通道:使用 range 迭代通道可以简化关闭通道后的处理逻辑。
  • 从通道返回的第二个值为bool类型,通道开启时为true,通道关闭时为false

💡 Tips小知识点

如何检查通道是否关闭

value, ok := <-myChannel
if !ok {fmt.Println("Channel is closed")
}

通道关闭后的情况

package mainimport ("fmt"
)func main() {jobs := make(chan int)// 启动一个 goroutine 来处理 jobs 通道go func() {for j := range jobs { // 使用 range 迭代接收 jobs 通道的值fmt.Println("Processing job:", j)}fmt.Println("No more jobs, exiting goroutine.")}()// 发送一些任务for i := 1; i <= 5; i++ {jobs <- ifmt.Println("Sent job:", i)}close(jobs) // 关闭通道,表示不再发送任务fmt.Println("All jobs sent.")// 等待 goroutine 完成(在这个简单示例中,它会在接收完所有任务后自动退出)
}
//输出
//Processing job: 1
//Sent job: 1
//Sent job: 2
//Processing job: 2
//Processing job: 3
//Sent job: 3
//Sent job: 4
//Processing job: 4
//Processing job: 5
//Sent job: 5
//All jobs sent.

Range over Channels

使用 range 迭代通道是 Go 语言中处理通道的一种简洁且高效的方式。通过 range 语法,可以自动处理通道的关闭,简化了代码逻辑。

基本用法

package mainimport "fmt"func main() {//创建通道queue,buffer为2queue := make(chan string, 2)queue <- "one" //发送消息到通道queue <- "two"close(queue) //关闭通道for elem := range queue {fmt.Println(elem)}
}//输出
//one
//two

使用range处理通道的好处

  • 使用 range 迭代通道时,Go 会持续从通道中接收值,直到通道被关闭为止。
  • 当通道关闭后,range 循环会自动结束,而不会引发panic
  • 在关闭通道后,所有未被读取的值都会被处理完,然后循环自动退出
  • 无需手动检查通道状态:使用 range 可以避免手动检查通道是否关闭或是否还有值,这样可以减少代码的复杂性。
  • 避免死锁风险:在处理通道时,手动检查通道状态可能导致逻辑错误,使用 range 可以有效避免这类问题。

💪无人扶我青云志,我自踏雪至山巅。
在这里插入图片描述

http://www.hkea.cn/news/722584/

相关文章:

  • 数据库网站建设公司他达拉非片
  • 英文商城网站建设搜索引擎营销的特点
  • 易优建站系统图片百度搜索
  • 网站开发不用框架web网站设计
  • 技能网站建设项目需求武汉网络推广外包公司
  • 安卓市场下载手机版优化网站排名技巧
  • 建设网站平台哪个好互联网营销外包推广
  • 工商注册企业名称查询广东seo网站推广代运营
  • 中纪委网站两学一做征文资源平台
  • java高端网站建设现在广告行业好做吗
  • wordpress 制作下载优化关键词怎么做
  • 宁波网站建设哪个公司好百度爱采购推广怎么入驻
  • 重庆市建设工程信息网特种作业企业网站seo多少钱
  • 域名备案做电影网站制作免费个人网站
  • 公司网络营销方案优化设计七年级上册数学答案
  • 网站建设策划方案网址搜索引擎
  • 艺术培训学校系统网站怎么做百度优化是什么
  • 自己的网站做飘窗百度推广账号登录入口
  • 国内好的网站建设国内外十大免费crm软件推荐
  • 淄博品质网站建设百度销售推广
  • 网站建设学习内容网站模板哪家好
  • 建立b2b网站成本微信营销平台系统
  • 学做衣服网 缤纷网站手机百度ai入口
  • 点餐系统网站建设画质优化app下载
  • 上海都有哪些企业公司seo网站seo
  • 进一步加强政府网站建设网站建设介绍ppt
  • 做网站的设计软件上海seo推广外包
  • 中国工程局人才招聘网福建seo推广方案
  • 深圳南山做网站的公司百度投诉中心
  • 辽宁建设工程信息网业绩认定武汉网站优化公司