前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go- Buffer Channel- Select-基础理解

Go- Buffer Channel- Select-基础理解

作者头像
李海彬
发布2018-03-20 14:56:21
1.6K0
发布2018-03-20 14:56:21
举报
文章被收录于专栏:Golang语言社区

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

带缓冲的Channel

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

如下代码所示

代码语言:javascript
复制
package main

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

Select

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

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

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

代码语言:javascript
复制
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 //接收消息
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-03-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档