Go-BufferChannel-Select-基础理解

来源:互联网 发布:suse linux 设置网关 编辑:程序博客网 时间:2024/06/06 07:06

上一篇文章讲了 协程与管道

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


带缓冲的Channel

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

如下代码所示 

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

Select 

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

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

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

package mainimport ("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 <- 0break //仅仅是跳出select循环并未跳出for循环}}} ()for i := 0; i<100 ; i++{c <- i}<- o //接收消息}




0 0
原创粉丝点击