Go- Buffer Channel- Select-基础理解

这篇主要讲Select这个有用的关键字用来监听管道顺带讲下带缓冲的Channel

带缓冲的Channel

Channel是可以带有缓冲的 c := make(chan int,3) 这么声明则代表这个管道里最多同时可以放三个int类型的数据

如下代码所示

package main

func main() {
	c := make(chan int,3)
	c <- 1
	c <- 1
	c <- 1
<span style="white-space:pre">	</span>//c <- 1 如果再加上这一句则会报错 因为无法同时放入四个int类型数据
	<- c
	<- c
	<- c
}

Select

Go提供了select关键字用于监听各个通道

比如我要取通道1中的数据并且是一有数据我就取出来 那我们该如何实现呢

这是就可以借助select 用来监听一旦有数据进来select自动帮你取数据出来 还是挺方便的一个功能

package main

import (
	"time"
	"fmt"
)

func main() {
	o := make(chan int)
	c := make(chan int)

	go func() {
		for {
			select {
			case a := <- c://监听c管道只要一有数据进来 就打印出来
				fmt.Println(a)
			//这里After返回 <-chan Time 也就是监听 <-chan Time这个管道
			//如果超过5秒钟 如果select一直未收到消息 那么 就会给<-chan Time通道发送一个消息
			//每隔5秒就会发送一次
			case <- time.After(5 * time.Second):
				o <- 0
				break //仅仅是跳出select循环并未跳出for循环
			}
		}
	} ()
	for i := 0; i<100 ; i++{
		c <- i
	}
	<- o //接收消息
}

原文发布于微信公众号 - Golang语言社区(Golangweb)

原文发表时间:2016-03-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏禁心尽力

多线程编程:多线程并发制单的开发记录【一】

进程和线程: 下图是在来自知乎用户的解释,个人感觉狠到位 ?        进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资...

21670
来自专栏Java后端技术栈

Java多线程编程-(13)-从volatile和synchronized的底层实现原理看Java虚拟机对锁优化所做的努力

对于Java来说我们知道,Java代码首先会编译成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上进行执行。

9910
来自专栏JAVA高级架构

Java 内存模型 JMM 浅析

JMM简介 Java Memory Model简称JMM, 是一系列的Java虚拟机平台对开发者提供的多线程环境下的内存可见性、是否可以重排序等问题的无关具体平...

34990
来自专栏Java帮帮-微信公众号-技术文章全总结

Java设计模式-命令模式

在对象的结构和创建问题都解决了之后,就剩下对象的行为问题了: 如果对象的行为设计的好,那么对象的行为就会更清晰,它们之间的协作效率就会提高. 行为型模式共有1...

36260
来自专栏芋道源码1024

源码级别解读 mybatis 插件

简介: ? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以...

39680
来自专栏眯眯眼猫头鹰的小树杈

深入理解 依赖注入

相信所有面试java开发的童鞋一定都被问到过是否使用过Spring,是否了解其IOC容器,为什么不直接使用工厂模式,以及究竟IOC和DI区别在于哪里这种问题。今...

9210
来自专栏跨界架构师

C#中的原子操作Interlocked,你真的了解吗?

  这个标题起的有点标题党的嫌疑[捂脸],这个事情的原委是这样的,有个Web API的站点在本地使用Release模式Run的时候出现问题,但是使用Debug模...

13230
来自专栏玄魂工作室

CTF实战28 Windows缓冲区溢出

该培训中提及的技术只适用于合法CTF比赛和有合法授权的渗透测试,请勿用于其他非法用途,如用作其他非法用途与本文作者无关

18810
来自专栏决胜机器学习

《Redis设计与实现》读书笔记(三十) ——Redis集群节点复制与故障转移

《Redis设计与实现》读书笔记(三十) ——Redis集群节点复制与故障转移 (原创内容,转载请注明来源,谢谢) 1、概述 redis集群的...

36840
来自专栏NetCore

Do You Know?Url Path MaxLength Limit -- 你或许以后会遇到的一个问题

最近一直在学习Asp.Net MVC,大家都知道可以用System.Web.Routing来解析一段Url,然后到达我们Route规则定下的一个Controll...

19080

扫码关注云+社区

领取腾讯云代金券