本文主要給大家介紹的是關于golang/225691.html">golang單向channel語法的相關內容,分享出來供大家參考學習,下面話不多說,來一起看看詳細的介紹:
今天閑來無事補充一下golang的語法知識,想起來看看context的用法,結果碰到了一個沒見過的channel語法:
// A Context carries a deadline, cancelation signal, and request-scoped values// across API boundaries. Its methods are safe for simultaneous use by multiple// goroutines.type Context interface { // Done returns a channel that is closed when this `Context` is canceled // or times out. Done() <-chan struct{} // Err indicates why this Context was canceled, after the Done channel // is closed. Err() error // Deadline returns the time when this Context will be canceled, if any. Deadline() (deadline time.Time, ok bool) // Value returns the value associated with key or nil if none. Value(key interface{}) interface{}}
注意看:Done() <- chan struct{}
,一個接口函數的聲明怎么這么奇怪呢?下面來分解一下。
Done() chan struct{}
:如果函數定義改成這樣,其意義是,
chan struct{}
。struct{}
。type Name struct{a int, b bool}
這樣去定義一個結構體的類型,其實struct{…}就是定義結構體,和map[string]int這種定義是一樣的,type只是給它啟了一個別名。 <- chan struct{}
:單獨看這個表達式,我們知道如果ch := make(chan struct{})
,那么<- ch是從管道里取出數據。但是chan struct{}
是類型而不是變量,竟然能從一個類型里取數據??
其實<-chan int
仍舊是一個管道類型,它叫做單向channel。如果是<-chan int
,說明是只能讀不能寫的管道(也不能關閉),如果是chan <- int
,說明是只能寫不能讀的管道(可以關閉),僅此而已!
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者使用Go語言能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。
新聞熱點
疑難解答