日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
創(chuàng)新互聯(lián)GO教程:Go語(yǔ)言單向通道——通道中的單行道

Go語(yǔ)言的類(lèi)型系統(tǒng)提供了單方向的 channel 類(lèi)型,顧名思義,單向 channel 就是只能用于寫(xiě)入或者只能用于讀取數(shù)據(jù)。當(dāng)然 channel 本身必然是同時(shí)支持讀寫(xiě)的,否則根本沒(méi)法用。

我們注重客戶(hù)提出的每個(gè)要求,我們充分考慮每一個(gè)細(xì)節(jié),我們積極的做好網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)服務(wù),我們努力開(kāi)拓更好的視野,通過(guò)不懈的努力,創(chuàng)新互聯(lián)公司贏得了業(yè)內(nèi)的良好聲譽(yù),這一切,也不斷的激勵(lì)著我們更好的服務(wù)客戶(hù)。 主要業(yè)務(wù):網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)站設(shè)計(jì),小程序設(shè)計(jì),網(wǎng)站開(kāi)發(fā),技術(shù)開(kāi)發(fā)實(shí)力,DIV+CSS,PHP及ASP,ASP.Net,SQL數(shù)據(jù)庫(kù)的技術(shù)開(kāi)發(fā)工程師。

假如一個(gè) channel 真的只能讀取數(shù)據(jù),那么它肯定只會(huì)是空的,因?yàn)槟銢](méi)機(jī)會(huì)往里面寫(xiě)數(shù)據(jù)。同理,如果一個(gè) channel 只允許寫(xiě)入數(shù)據(jù),即使寫(xiě)進(jìn)去了,也沒(méi)有絲毫意義,因?yàn)闆](méi)有辦法讀取到里面的數(shù)據(jù)。所謂的單向 channel 概念,其實(shí)只是對(duì) channel 的一種使用限制。

單向通道的聲明格式

我們?cè)趯⒁粋€(gè) channel 變量傳遞到一個(gè)函數(shù)時(shí),可以通過(guò)將其指定為單向 channel 變量,從而限制該函數(shù)中可以對(duì)此 channel 的操作,比如只能往這個(gè) channel 中寫(xiě)入數(shù)據(jù),或者只能從這個(gè) channel 讀取數(shù)據(jù)。

單向 channel 變量的聲明非常簡(jiǎn)單,只能寫(xiě)入數(shù)據(jù)的通道類(lèi)型為
chan<-,只能讀取數(shù)據(jù)的通道類(lèi)型為
<-chan,格式如下:

var 通道實(shí)例 chan<- 元素類(lèi)型    // 只能寫(xiě)入數(shù)據(jù)的通道
var 通道實(shí)例 <-chan 元素類(lèi)型    // 只能讀取數(shù)據(jù)的通道

  • 元素類(lèi)型:通道包含的元素類(lèi)型。
  • 通道實(shí)例:聲明的通道變量。

單向通道的使用例子

示例代碼如下:

ch := make(chan int)
// 聲明一個(gè)只能寫(xiě)入數(shù)據(jù)的通道類(lèi)型, 并賦值為ch
var chSendOnly chan<- int = ch
//聲明一個(gè)只能讀取數(shù)據(jù)的通道類(lèi)型, 并賦值為ch
var chRecvOnly <-chan int = ch

上面的例子中,chSendOnly 只能寫(xiě)入數(shù)據(jù),如果嘗試讀取數(shù)據(jù),將會(huì)出現(xiàn)如下報(bào)錯(cuò):

invalid operation: <-chSendOnly (receive from send-only type chan<- int)

同理,chRecvOnly 也是不能寫(xiě)入數(shù)據(jù)的。

當(dāng)然,使用 make 創(chuàng)建通道時(shí),也可以創(chuàng)建一個(gè)只寫(xiě)入或只讀取的通道:

ch := make(<-chan int)

var chReadOnly <-chan int = ch
<-chReadOnly

上面代碼編譯正常,運(yùn)行也是正確的。但是,一個(gè)不能寫(xiě)入數(shù)據(jù)只能讀取的通道是毫無(wú)意義的。

time包中的單向通道

time 包中的計(jì)時(shí)器會(huì)返回一個(gè) timer 實(shí)例,代碼如下:

timer := time.NewTimer(time.Second)

timer的Timer類(lèi)型定義如下:

type Timer struct {
    C <-chan Time
    r runtimeTimer
}

第 2 行中 C 通道的類(lèi)型就是一種只能讀取的單向通道。如果此處不進(jìn)行通道方向約束,一旦外部向通道寫(xiě)入數(shù)據(jù),將會(huì)造成其他使用到計(jì)時(shí)器的地方邏輯產(chǎn)生混亂。

因此,單向通道有利于代碼接口的嚴(yán)謹(jǐn)性。

關(guān)閉 channel

關(guān)閉 channel 非常簡(jiǎn)單,直接使用Go語(yǔ)言?xún)?nèi)置的 close() 函數(shù)即可:

close(ch)

在介紹了如何關(guān)閉 channel 之后,我們就多了一個(gè)問(wèn)題:如何判斷一個(gè) channel 是否已經(jīng)被關(guān)閉?我們可以在讀取的時(shí)候使用多重返回值的方式:

x, ok := <-ch

這個(gè)用法與 map 中的按鍵獲取 value 的過(guò)程比較類(lèi)似,只需要看第二個(gè) bool 返回值即可,如果返回值是 false 則表示 ch 已經(jīng)被關(guān)閉。


網(wǎng)站題目:創(chuàng)新互聯(lián)GO教程:Go語(yǔ)言單向通道——通道中的單行道
網(wǎng)站網(wǎng)址:http://www.5511xx.com/article/dpjispc.html