Go- Buffer Channel- Select-基礎理解
阿新 • • 發佈:2022-05-04
這篇主要講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 //接收訊息 }