Go 初體驗 channel 1 基本用法

2022-02-08 16:07:49 字數 1209 閱讀 4300

channel 分為兩種:

1. 無緩衝 channel

2. 緩衝 channel

無緩衝 channel 的使用必須遵循乙個原則:推送和讀取必須同時存在,否則就發生死鎖

先上**:

這裡定義了乙個 int 型的通道 c1,然後通過輔助協程並行給 c1 推送 v(就是 i)然後又在主協程讀取。

輸出:

有緩衝 channel 必須遵循乙個原則:要確保 channel 緩衝的個數與推送、讀取成比例

輸出:

這裡定義了乙個緩衝區長度為3的 channel,然後推送3條訊息,接著迴圈讀取這個 channel,直到 channel 為空。

注意 close(c2)必須有,不然就是死鎖,跟上篇文章的死鎖情況1是乙個道理,close()語句的作用就是告訴計算機我這個 channel 關閉了,不會再接收任何訊息啦,故,主攜程不會阻塞而發生死鎖。

公升級一下**,使用輔助攜程實現:

呼叫:

75行便是使用輔助攜程實現給 c3 推送訊息

再公升級一下,我們用 channel 來實現乙個單發單收的佇列:

呼叫:

93行模擬了真實推送情況,每隔2秒推送乙個訊息,而主攜程這裡一直在等待,為什麼沒有死鎖?

因為96行   :)

不要通過共享記憶體來通訊,而應該通過通訊來共享記憶體

Go初體驗 基礎

go的字串有點不一樣。它是utf8字元的乙個序列 當字元為乙個ascii碼時為乙個位元組,其他字元則根據需要占用2 4個位元組。該做法的好處是 節省了記憶體和硬碟的儲存空間,同時,不需要像其它語言一樣對utf8字符集的文字進行編碼和解碼。go通過雙引號 和反引號 來構建字串。雙引號則會對文字進行解析...

Go初體驗 Mac上安裝Go

筆記 進入配置檔案修改環境變數 vim bashrc編輯goroot,gopath,path export goroot usr local go export path path goroot bin export gopath data www go解釋 goroot表示 go 在你的電腦上的安...

Go 通道(channel)的基本操作

通道型別是go語言自帶的 唯一乙個可以滿足併發安全性的型別,在宣告並初始化乙個通道時,需要用到內建函式make,傳給make函式的第乙個引數應該代表通道的具體型別的型別字面量。如型別字面量 chan int,其中chan表示通道型別的關鍵字,而int說明了該通道型別的元素型別。在初始化通道時,mak...