030_go语言中的通道关闭
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
 
030_go语言中的通道关闭的更多相关文章
- 031_go语言中的通道遍历
		
代码演示 package main import "fmt" func main() { queue := make(chan string, 2) queue <- &qu ...
 - 027_go语言中的通道选择器
		
代码演示 package main import "fmt" import "time" func main() { c1 := make(chan strin ...
 - 026_go语言中的通道方向
		
代码演示 package main import "fmt" func ping(pings chan<- string, msg string) { pings <- ...
 - 025_go语言中的通道同步
		
代码演示 package main import "fmt" import "time" func worker(done chan bool) { fmt.P ...
 - 023_go语言中的通道
		
代码演示 package main import "fmt" func main() { messages := make(chan string) go func() { mes ...
 - Go语言中的并发编程
		
并发是编程里面一个非常重要的概念,Go语言在语言层面天生支持并发,这也是Go语言流行的一个很重要的原因. Go语言中的并发编程 并发与并行 并发:同一时间段内执行多个任务(你在用微信和两个女朋友聊天) ...
 - C语言中关于对目录的操作
		
原文地址:C语言中关于对目录的操作 目录的操作不论是在嵌入式产品还是应用软件编程都是必不可少的,不同的开发语言可能略有不同,笔者主要是讨论在Linux平台下对目录的一系列操作: 1.获取当前目录操作: ...
 - c语言中的文件流
		
一.打开和关闭文件 #include int main( void ) { FILE* pReadFile = fopen( "E:\\mytest.txt", "r&q ...
 - C语言中文件的读取和写入
		
在C语言中写文件 //获取文件指针 FILE *pFile = fopen("1.txt", //打开文件的名称 "w"); // 文件打开方式 如果原来有内容 ...
 
随机推荐
- MYSQL 之 JDBC(十七): 调用函数&存储过程
			
1.通过Connection对象的prepareCall()方法创建一个CallableStatement对象的实例.在使用Connection对象的preparedCall()方法时,需要传入一个S ...
 - MYSQL 之 JDBC(十六): DBUtils
			
DBUtils是Apache组织提供的一个开源的JDBC工具类库,能极大简化jdbc编码的工作量 API介绍 QueryRunner ResultSetHandler 工具类DbUtils 用DBUt ...
 - python爬虫中对含中文的url处理以 及 Python3—UnicodeEncodeError 'ascii' codec can't encode characters in position
			
在练习urllib操作中,遇到了url中含有中文字符的问题.比如http://dotamax.com/,看下源码的话,上方的搜索框的name=p,输入内容点击搜索以后,通过GET方法进行传递,比如我们 ...
 - bzoj3374[Usaco2004 Mar]Special Serial Numbers 特殊编号*
			
bzoj3374[Usaco2004 Mar]Special Serial Numbers 特殊编号 题意: 求比一个数大的最小的一半以上的数位相同的数.数位数≤100. 题解: 模拟题.从低位枚举到 ...
 - Linux下一只五颜六色的「猫」
			
大家好,我是良许. 有使用过 Linux 系统的小伙伴,肯定会使用过 cat 这个命令.当然,在 Linux 下,此猫非彼猫,这里的 cat 并不代表猫,而是单词 concatenate 的缩写. c ...
 - Burp Suite Scanner Module - 扫描模块
			
Burp Suite Professional 和Enterprise Version的Scaner功能较丰富. 以Professional版本为例,包含Issue activity, Scan qu ...
 - 学会DevOps 能拿多少工资?DevOps 怎么自学?
			
落地高薪!DevOps为何受宠? DevOps在近几年的发展势头可谓是迅猛无比,已经有越来越多的企业机构开始尝试落地,从国外的微软谷歌到国内的阿里腾讯,DevOps已经从时髦概念落地最佳实践,进而改变 ...
 - webview访问URL
			
// // Do any additional setup after loading the view. // //创建WKWebView // WKWebView *web = ...
 - Vue脚手架创建项目出现 (Failed to download repo vuejs-templates/webpack: Response code 404)
			
搭建好(脚手架2.X版本)环境像往常一样使用vue init webpack xxxx 创建项目可以是没多久就开始报错了 报错结果就是:vue-cli · Failed to download rep ...
 - Nexus安装与迁移
			
Maven registry(maven私有仓库) 配置Java export JAVA_HOME=/software/jdk1.7.0_79 export JRE_HOME=${JAVA_HOME} ...