Go- Buffer Channel- Select-基础理解

时间:2022-05-04
本文章向大家介绍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 //接收消息
}