1. 程式人生 > 其它 >Go從入門到精通——單向通道——通道中的單行道

Go從入門到精通——單向通道——通道中的單行道

單向通道——通道中的單行道

  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
}