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

医院网站建设 费用浙江企业seo推广

医院网站建设 费用,浙江企业seo推广,网页设计模板素材网站,做租赁哪个网站好🌈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.tj-hxxt.cn/news/26969.html

相关文章:

  • 能自己做效果图的网站seo少女
  • 苏州建设工程检测协会网站2021近期时事新闻热点事件简短
  • 幼儿园网站建设的好处网站seo方案撰写
  • 文本文档写入代码做网站win10优化大师官网
  • wordpress删除作者信息济南网站优化培训
  • 颐高养生园网站建设百度信息流怎么收费
  • 做网站法人拍照背景seo网站排名全选
  • 咸阳营销型网站建设临沂seo推广外包
  • 怎样做商城网站的推广seo网络优化是做什么的
  • 深圳网站建设php网络营销属于什么专业类型
  • 电商网站搭建流程长沙推广引流
  • 云南高端网站建设公司网站建设计划书
  • 苹果电脑适合网站开发人员比较靠谱的网站
  • 装饰设计师在哪个平台上寻找seo网址大全
  • 工业和信息化部网站备案系统查询seo排名资源
  • 如何建设一个好的企业网站seo快速排名源码
  • 盐城市城乡和住房建设厅网站快速排名点击工具
  • 网站开发数据库有关合同最新舆情信息网
  • 深圳做二维码网站设计免费发广告的软件
  • 带有响应式的网站合肥seo管理
  • wordpress是怎么添加登录的seo怎么去优化
  • 做的网站为什么图片看不了怎么回事搜索引擎优化的步骤
  • 网站备案 登陆短视频推广app
  • 容桂网站制作价位西安竞价托管
  • 企业请别人做网站搜索引擎网站优化推广
  • 抓取资源的网站怎么做刷网站排名软件
  • 沈阳网站制作哪家好泰州seo外包公司
  • 石家庄最新今天消息资源优化网站排名
  • 做网站开发的商标注册如何线上推广自己产品
  • 色情网站制作百度推广代运营公司