代码演示
package main

import "fmt"

func main() {
jobs := make(chan int, 5)
done := make(chan bool) go func() {
for {
j, more := <-jobs
if more {
fmt.Println("received job", j)
} else {
fmt.Println("received all jobs")
done <- true
return
}
}
}() for j := 1; j <= 3; j++ {
jobs <- j
fmt.Println("sent job", j)
}
close(jobs)
fmt.Println("sent all jobs")
<-done
}

  

代码运行结果

sent job 1
sent job 2
sent job 3
sent all jobs
received job 1
received job 2
received job 3
received all jobs

  

代码解读

  • 将一个通道关闭的话,会给接收方传递一个完成工作的信息,这个特性是很有用的
  • 以上例子,创建了一个jobs通道,并且通过这个通道,给go协程传递任务信息
  • 当jobs通道再没有任务信息给go协程传递时候,我们close掉这个通道
  • 在go协程中,我们利用more这个值来判断通道是否关闭,如果关闭了,那么more的值为false,并且通知给通道done

最新文章

  1. Javascript实用方法
  2. Freemarker与Servlet
  3. 如何在Android Studio中添加RecyclerView-v7支持包
  4. Javascript设计模式系列学习笔记
  5. C语言学习002:第一个完整的C程序代码
  6. C#身份证识别相关技术
  7. 终于看完&lt;LEARNING SQL&gt;第二版,立此存照
  8. mac工具收藏
  9. aggregateByKey
  10. 基本的MFC多线程
  11. Eclipse配置Flex开发环境(转)
  12. 利用httpclient和多线程刷訪问量代码
  13. Objective-C中的Hello World
  14. 三:动态SQL
  15. ESP8266代码中的存储标记
  16. linux 用户密码过期时间
  17. storm中的一些概念
  18. Spring-core中的cglib小用法
  19. Sublime Text 3 格式化HTML CSS JS 代码
  20. (转)CentOS7使用ACL精确控制文件和目录的访问权限

热门文章

  1. LDAP注入介绍
  2. MnasNet:经典轻量级神经网络搜索方法 | CVPR 2019
  3. P1433 吃奶酪(洛谷)状压dp解法
  4. Fisher算法+两类问题
  5. redis pipelined 示例
  6. 乌班图16 配置nginx
  7. ActiveMQ【CVE-2016-3088】上传公钥实现sssh免密登录
  8. 如何消灭飞机的“黑色十分钟”,AI来帮忙
  9. hostapd阅读(openwrt)-1
  10. Android 文件存储浅析