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在這些流程控制語句中的條件表示式部分不使用括號。甚至有些時候使用括號會報錯,但有些複雜...