golang中單向channel的語法介紹
本文主要給大家介紹的是關(guān)于golang單向channel語法的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說,來一起看看詳細(xì)的介紹:
今天閑來無事補(bǔ)充一下golang的語法知識(shí),想起來看看context的用法,結(jié)果碰到了一個(gè)沒見過的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{} ,一個(gè)接口函數(shù)的聲明怎么這么奇怪呢?下面來分解一下。
Done() chan struct{} :如果函數(shù)定義改成這樣,其意義是,
- 函數(shù)名Done,參數(shù)(),返回值
chan struct{}。 - 單獨(dú)拿返回值來說,它是一個(gè)管道chan,內(nèi)部的數(shù)據(jù)類型是
struct{}。 - 單獨(dú)拿struct{}來說,我們熟悉
type Name struct{a int, b bool}這樣去定義一個(gè)結(jié)構(gòu)體的類型,其實(shí)struct{…}就是定義結(jié)構(gòu)體,和map[string]int這種定義是一樣的,type只是給它啟了一個(gè)別名。
<- chan struct{} :?jiǎn)为?dú)看這個(gè)表達(dá)式,我們知道如果ch := make(chan struct{}) ,那么<- ch是從管道里取出數(shù)據(jù)。但是chan struct{}是類型而不是變量,竟然能從一個(gè)類型里取數(shù)據(jù)??
其實(shí)<-chan int仍舊是一個(gè)管道類型,它叫做單向channel。如果是<-chan int,說明是只能讀不能寫的管道(也不能關(guān)閉),如果是chan <- int ,說明是只能寫不能讀的管道(可以關(guān)閉),僅此而已!
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者使用Go語言能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
go交叉編譯sqlite報(bào)錯(cuò)問題解決分析
這篇文章主要為大家介紹了go交叉編譯sqlite報(bào)錯(cuò)問題解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
go如何優(yōu)雅關(guān)閉Graceful?Shutdown服務(wù)
這篇文章主要為大家介紹了go優(yōu)雅關(guān)閉Graceful?Shutdown服務(wù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
Go的gin參數(shù)校驗(yàn)中的validator庫詳解
這篇文章主要介紹了Go的gin參數(shù)校驗(yàn)之validator庫,使用 validator 以后,只需要在定義結(jié)構(gòu)體時(shí)使用 binding 或 validate tag標(biāo)識(shí)相關(guān)校驗(yàn)規(guī)則,就可以進(jìn)行參數(shù)校驗(yàn)了,而不用自己?jiǎn)为?dú)去寫常見的校驗(yàn)規(guī)則,需要的朋友可以參考下2023-08-08
GoLang中的timer定時(shí)器實(shí)現(xiàn)原理分析
Timer中對(duì)外暴露的只有一個(gè)channel,這個(gè) channel也是定時(shí)器的核心。當(dāng)計(jì)時(shí)結(jié)束時(shí),Timer會(huì)發(fā)送值到channel中,外部環(huán)境在這個(gè) channel 收到值的時(shí)候,就代表計(jì)時(shí)器超時(shí)了,可與select搭配執(zhí)行一些超時(shí)邏輯2023-02-02

