channel模式
根據(jù)同步方式不同,channel有兩種模式:
1、同步模式,形式如下:
ch := make(chan int)
2、隊列模式,形式如下:
ch := make(chan int, 10)
根據(jù)數(shù)據(jù)方向流不同,channel類型可以有以下三種模式:
- 寫操作模式(只發(fā)送)
- 讀操作模式(只接收)
- 讀寫操作模式(不限發(fā)送與接收)
channel操作
channel有以下操作:
- 創(chuàng)建
- 關(guān)閉
- 寫(發(fā)送)操作
- 讀(接收)操作
這些操作都是原子操作
channel狀態(tài)
根據(jù)模式與操作,channel有以下狀態(tài):
- 同步寫阻塞
- 同步讀阻塞
- 關(guān)閉狀態(tài)
- 隊列寫阻塞
- 隊列讀阻塞
- 隊列可讀寫
- nil狀態(tài)
channel狀態(tài)與操作之間關(guān)系
| 狀態(tài)/操作 | 寫操作 | 讀操作 | 關(guān)閉 | 創(chuàng)建 |
|---|---|---|---|---|
| nil狀態(tài) | 寫阻塞 | 寫阻塞 | 產(chǎn)生panic(close of nil channel) | - |
| 同步寫阻塞 | 寫阻塞 | 成功讀取數(shù)據(jù) | 進(jìn)入關(guān)閉狀態(tài),產(chǎn)生panic | - |
| 同步讀阻塞 | 成功寫入數(shù)據(jù) | 讀阻塞 | 進(jìn)入關(guān)閉狀態(tài) | - |
| 關(guān)閉狀態(tài) | 產(chǎn)生panic | 立即返回(nil,false) | 產(chǎn)生panic | - |
| 隊列寫阻塞 | 寫阻塞 | 成功讀取隊列中數(shù)據(jù) | 進(jìn)入關(guān)閉狀態(tài),成功寫入隊列的數(shù)據(jù)可讀 | - |
| 隊列讀阻塞 | 成功寫入數(shù)據(jù) | 讀阻塞 | 進(jìn)入關(guān)閉狀態(tài) | - |
| 隊列可讀寫 | 成功寫入數(shù)據(jù) | 成功讀取數(shù)據(jù) | 進(jìn)入關(guān)閉狀態(tài),成功寫入隊列的數(shù)據(jù)可讀 | - |
由于個人水平有限,有什么不足與錯誤,敬請指正!