最近大傢私信我讓我說說 Go 語言中的 Channel,年末瞭,有的人已經開始準備面試,真快呀!今天我們就來說說 Channel嗎,日常開發中使用也是比較頻繁的,面試也是高頻。聽我慢慢說來。
Channel (通道) 是 Go 語言高性能並發編程中的核心數據結構和與 Goroutine 之前重要的通信方式。在 Go 語言中通道是一種特殊的類型。通道像一個傳送帶或者隊列,遵循先入先出(First In First Out)的規則,保證收發數據的順序。
在很多主流的編程語言中,多個線程間基本上都是通過共享內存來實現通信的,如Java。這類語言往往都需要限制一定的線程數量從而解決線程競爭。用圖的方式簡單表達一下。
Go 語言的設計卻截然不同,在 Go 語言提供瞭一種新的並發模型,在 Goroutine 中使用 Channel 傳遞數據,從而實現通信。
Go 語言提倡 “不要通過共享內存的方式進行通信,而是通過 Channel 通信的方式共享內存”。
Don’t communicate by sharing memory, share memory by communicating
我們會結合 chanal 使用場景的 5 大類型來闡述,更好的瞭解 Channel。
接下來學一下一下 chanel 的常見用法。
我們一開始就說 Go 語言是通過通信來實現共享內存的,故我們可以從 channel 中接受數據,也能發送數據。下文中會簡稱 channek 為 chan。我們將從一下三種情況展開說下
chan int // 可以發送和接收 int 數據
chan <- struct{} // 隻能發送 struct{}
<-chan string // 隻能從 chan 接收 string 數據
一、什麼是WEEE?WEEE即Waste Electrical andElectronic E (WEEE) Directive(2002/96/EC)報廢的電子電氣設備,
1. “再5分钟,我马上就好了” 你放心,5分钟绝对不是一个确切的数值,它只是一个状态的描述,就是“还没好”,这5分钟可以是半 ...