亚洲精品中文免费|亚洲日韩中文字幕制服|久久精品亚洲免费|一本之道久久免费

      
      

            <dl id="hur0q"><div id="hur0q"></div></dl>

                  <style id="fgfnh"><blockquote id="fgfnh"></blockquote></style>

                  《Go題庫(kù)》介紹一下通道

                  面試企業(yè) 知乎

                  題目解析 GOLANG ROADMAP社區(qū)

                  答案1(欒龍生)

                  如果說(shuō)goroutine是Go程序并發(fā)的執(zhí)行體,通道就是它們之間的連接。通道可以使一個(gè)goroutine發(fā)送特定值到另一個(gè)goroutine的通信機(jī)制。每一個(gè)通道都是一個(gè)具體類型的導(dǎo)管,叫做通道的元素類型。例如一個(gè)具有int類型元素的通道寫為chan int。

                  通道是一個(gè)用map創(chuàng)建的數(shù)據(jù)結(jié)構(gòu)的引用。當(dāng)復(fù)制或者作為參數(shù)傳遞到一個(gè)函數(shù)時(shí),復(fù)制的是引用,這樣調(diào)用者和被調(diào)用者都引用同一份數(shù)據(jù)結(jié)構(gòu)。和其他引用類型一樣,通道的零值是nil。

                  通道有兩個(gè)主要操作:發(fā)送(send)和接收(receive),兩者統(tǒng)稱為通信。send語(yǔ)句從一個(gè)goroutine傳輸一個(gè)值到另一個(gè)在執(zhí)行接收表達(dá)式的goroutine。兩個(gè)操作都使用<-操作符書寫。發(fā)送語(yǔ)句中,通道和值分別在<-的左右兩邊。在接收表達(dá)式中,<-放在通道操作數(shù)前面,在接收表達(dá)式中,其結(jié)果未被使用也是合法的。

                  ch <- x //發(fā)送語(yǔ)句x = <-ch //接收語(yǔ)句<-ch //接收語(yǔ)句,丟棄結(jié)果

                  通道支持第三個(gè)操作:關(guān)閉 (close),它設(shè)置一個(gè)標(biāo)志位來(lái)指示值當(dāng)前已經(jīng)發(fā)送完畢,這個(gè)通道后面沒(méi)有值了;關(guān)閉后的發(fā)送操作將導(dǎo)致宕機(jī)。在一個(gè)已經(jīng)關(guān)閉的通道上進(jìn)行接收操作,將獲取所有已經(jīng)發(fā)送的值,直到通道為空;這時(shí)任何接收操作會(huì)立即完成,同時(shí)獲取到一個(gè)通道元素對(duì)應(yīng)的零值。通過(guò)調(diào)用內(nèi)置的close函數(shù)來(lái)關(guān)閉通道:

                  close(ch)

                  根據(jù)通道的容量,可以將通道分為無(wú)緩沖通道和緩沖通道

                  • 無(wú)緩沖通道

                  ch = make(chan int) ch = make(chan int, 0)

                  • 有緩沖通道

                  ch = make(chan int, 3)

                  根據(jù)通道傳輸方向,還可以通道分為雙向通道,只讀通道和只寫通道

                  • 只讀通道
                  • 只能發(fā)送的通道,允許發(fā)送但不允許接收

                  chan<- int

                  • 只寫通道
                  • 只能接收的通道,允許接收但不允許發(fā)送

                  <-chan int

                  答案2(溪尾)

                  通道類型的值本身就是并發(fā)安全的。在聲明并初始化一個(gè)通道時(shí),可以使用內(nèi)建函數(shù)make,傳給這個(gè)函數(shù)第一個(gè)參數(shù)為通道具體類型的字面量(如:chan int),還可以接一個(gè)可選的整形參數(shù)作為通道的容量,但是這個(gè)整形數(shù)據(jù)不能小于零。

                  通道相當(dāng)與一個(gè)先進(jìn)先出(FIFO)的隊(duì)列,各個(gè)元素嚴(yán)格按照發(fā)送順序排列,先被發(fā)送的一定會(huì)被先接收。使用操作符表示<-

                  如果定義通道時(shí)未指定通道的長(zhǎng)度,那么該通道的長(zhǎng)度為0,沒(méi)有緩沖,即發(fā)送一個(gè)數(shù)據(jù)之后,通道就會(huì)阻塞,直到該元素被接收。如果定義的長(zhǎng)度為n(n為正整數(shù)),那么通道的長(zhǎng)度即為n。

                  鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
                  用戶投稿
                  上一篇 2022年6月19日 15:18
                  下一篇 2022年6月19日 15:18

                  相關(guān)推薦

                  聯(lián)系我們

                  聯(lián)系郵箱:admin#wlmqw.com
                  工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息