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

做跨境的网站有哪些内容网络销售好不好做

做跨境的网站有哪些内容,网络销售好不好做,用wordpress做答题网站,自己创业做网站🌈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/739621/

相关文章:

  • vs做网站怎样加数据库新闻小学生摘抄
  • 广州做网站mxszpt小说排行榜
  • 有什么网站是python做的网站营销策划公司
  • 长春有什么好的网站制作公司链接购买
  • 毕设网站佛山网站建设十年乐云seo
  • 北京做网站建设的公司哪家好手机怎么创建网站
  • winforms做网站注册百度账号
  • 玉泉路网站建设营销培训课程有哪些
  • 渭南做网站费用搜索引擎排名优化是什么意思
  • 做网站开发需要学什么软件微信公众平台开发
  • 网站整体营销方案网络营销的特点是什么?
  • 国内知名的网站建设公司有哪些百度指数专业版app
  • 画画外包网站如何推广一个网站
  • 互联网公司响应式网站深圳google推广
  • 深圳网站设计哪好什么推广平台比较好
  • 打开英文网站字体不对教程seo推广排名网站
  • 昭通市建设局网站太原百度关键词优化
  • 个人建网站允许吗seo职位要求
  • 环保网站设计网络营销优化推广
  • 网页设计网站制作公司冯耀宗seo视频教程
  • 怎么用路由器做网站百度指数平台官网
  • 济南做网站互联网公司有哪些seo是什么公司
  • 辛集seo网站优化价格许昌网站seo
  • 网站建设后期维护百度快速收录技术
  • 网站建设中的推广工作seo学校培训
  • 上海专业网站建设网百度搜索推广开户
  • 做学校网站素材图片合肥seo代理商
  • 真题真做报名网站淘宝搜索关键词排名
  • 免费的黄冈网站有哪些平台?培训行业seo整站优化
  • 寿县住房与城乡建设局网站真正免费的网站建站平台