Go基礎系列 nil channel用法示例

2022-02-20 09:29:08 字數 808 閱讀 8499

go channel系列

當未為channel分配記憶體時,channel就是nil channel,例如var ch1 chan int。nil channel會永遠阻塞對該channel的讀、寫操作。

nil channel會阻塞對該channel的所有讀、寫。所以,可以將某個channel設定為nil,進行強制阻塞,對於select分支來說,就是強制禁用此分支。

以下是乙個nil channel的示例:

package main

import (

"fmt"

"math/rand"

"time"

)// 不斷向channel c中傳送[0,10)的隨機數

func send(c chan int)

}func add(c chan int) }}

func main()

上面的示例中,send()向通道c不斷傳送10以內的隨機整數,add()則在一秒內不斷讀取通道c中的資料並進行加總。一秒時間到後,t.c通道就會有資料,第二個case分支就會被選中,第二個case會讓第乙個case評估的channel變為nil channel,使得第乙個case從此永久禁用,因為第二個case沒有多餘的資料可讀,它也被永久禁用。總共3秒之後,main goroutine結束,程式結束。

如果不理解newtimer(d),換成after(d)是一樣的,after(d)和newtime(d).c是等價的。

func add(c chan int) 

}}

GO 開發系列 基礎 Go 併發程式設計

併發和並行說明 併發特點 並行特點 go 協程 說明 乙個 go 執行緒上可以起多個協程,協程可以理解為是輕量級的執行緒 go 協程特點 go 併發原理 mpg 模型 詳見部落格 示例 package main import fmt time 向 intchan放入 1 8000 個數 func p...

go語言 基礎系列 map基本操作

map 是雜湊表的引用,資料組 鍊錶的智慧型結合 建立 使用內建函式 mymap make map string int 通過字面量賦值 mymap map string int空map 為 map string int 刪除 使用內建函式delete delete mymap,a delete原型...

Go基礎系列 流程控制結構

條件判斷結構 if else 分支選擇結構 switch case 迴圈結構 for break 退出for或switch結構 以及select continue 進入下一次for迭代 雖然go是類c的語言,但go在這些流程控制語句中的條件表示式部分不使用括號。甚至有些時候使用括號會報錯,但有些複雜...