Go從入門到精通——單向通道——通道中的單行道
阿新 • • 發佈:2022-05-11
單向通道——通道中的單行道
Go 的通道可以在宣告時約束其操作方向,如只發送或是隻接收。這種約束方向的通道被稱為單向通道。
1、單向通道的宣告格式
var 通道例項 chan<- 元素型別 // 只能傳送通道
var 通道例項 <-chan 元素型別 // 只能接收通道
- 元素型別:通道包含的元素型別。
- 通道例項:宣告的通道變數。
2、單向通道的使用例子
示例程式碼如下:
ch := make(chan int) var chSendOnly chan<- int = ch //宣告一個只能傳送的通道型別,並賦值為 ch var chRecvOnly <-chan int = ch //宣告一個只能接收的通道型別,並賦值為 ch
3、time包中的單向通道
time包中的計時器會返回一個 timer 例項,程式碼如下:
timer := time.NewTimer(time.Second)
timer 的 Timer 型別定義如下:
type Time struct{
C <-chan Time // C通道的型別是一種只能接收的單向通道。此處進行通道方向約束,能避免外部向通道傳送資料,造成其他使用到計時器的地方邏輯產生混亂
r runtimeTimer
}