go基礎知識 通道 channel

2022-10-05 13:45:22 字數 675 閱讀 1344

1.channel:go特殊的資料型別,用於通訊,使用的時候需要注意下結合使用不當容易造成死鎖,在結合 for select 裡使用break是沒效果的

2.語法定義:  <-chan 讀取, chan<-寫入

var cha = make(chan type,len)//有緩衝

var chb = make(chan type)//無緩衝

從無緩衝的 channel 中讀取訊息會阻塞,直到有 goroutine 向該 channel 中傳送訊息;

同理,向無快取的 channel 中傳送訊息也會阻塞,直到有 goroutine 從 channel 中讀取訊息

案例:func main()else

//default: //如果沒有default字句,select將阻塞,直到某個通訊可以執行

// fmt.println("default")}}

end: fmt.println("end")

}(cha)

//或者

//for v := range cha

go func(chtemp chan<- int)

close(chtemp)
}(cha)

time.sleep(3 * 1e9)

結果輸出:0,1,2,3,4,5,6,7,8,9

go 通道 go語言通道channel

通過使用通道,在多個goroutine傳送和接受共享的資料,達到資料同步的目的。通道,他有點像在兩個routine之間架設的管道,乙個goroutine可以往這個管道裡塞資料,另外乙個可以從這個管道裡取資料,有點類似於我們說的佇列。宣告乙個通道很簡單,我們使用chan關鍵字即可,除此之外,還要指定通...

go語言基礎 快取通道 channel

非快取的通道,傳送和接收都是阻塞 帶快取的通道,有一塊快取區可以繼續傳送和接收資料。make chan t,size 快取區中已經滿了,才會阻塞程式 ch1 make chan int,5 ch1 100 不阻塞,因為有快取 ch1 200 ch1 300 ch1 400 ch1 500 快取區已滿...

12 Go語言基礎 通道 channel

說道通道 channel,不得不提go語言的併發程式設計模型 csp。go語言提倡,通過通訊來共享記憶體。goroutines 可以看做是go的乙個併發執行緒。基於系統執行緒。每啟動乙個goroutine的堆初始化占用是2 4k,可以擴大到1g。這也是go語言可以啟動成千上萬個goroutine的原...