2019-03-08 channel

channel簡介

channel 是用來通信的,通過它,一個 goroutine 可以想另一 goroutine 發(fā)送消息。channel 本身還需關(guān)聯(lián)了一個類型,也就是 channel 可以發(fā)送數(shù)據(jù)的類型。例如: 發(fā)送 int 類型消息的 channel 寫作 chan int 。


channel類型

channel有2種 有size 和無size


無size


有size

ChannelType = ( "chan" | "chan" "<-" | "<-" "chan" ) ElementType .

它包括三種類型的定義??蛇x的<-代表channel的方向。如果沒有指定方向,那么Channel就是雙向的,既可以接收數(shù)據(jù),也可以發(fā)送數(shù)據(jù)。


單向無法轉(zhuǎn)為雙向



重復(fù)關(guān)閉同一個 channel 會產(chǎn)生 panic

重復(fù)關(guān)閉同一個 channel
結(jié)果



向一個已關(guān)閉的 channel 中發(fā)送消息會產(chǎn)生 panic


向一個已關(guān)閉的 channel?


結(jié)果



無size的channel要配合go使用


結(jié)果


且輸入要在go里


結(jié)果



go 與channel


1有沒有size的channel配合go都不會出現(xiàn)意外

1

2.1無size的channel?有關(guān)閉channel

關(guān)閉后不管讀幾次值都是0

2.2無size的channel 沒有關(guān)閉channel

沒關(guān)閉讀一次正常


沒關(guān)閉讀的次數(shù)只要大于1就會報錯fatal error: all goroutines are asleep - deadlock!


2.3 有size的channel 沒有關(guān)閉channel


寫幾次就要讀幾次,不然會報錯


2.4 有size的channel 有關(guān)閉channel


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容