最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

Go元素的關(guān)鍵字所在--chan通道

來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 15:23:36
文檔

Go元素的關(guān)鍵字所在--chan通道

Go元素的關(guān)鍵字所在--chan通道:HTML validate是指HTML驗(yàn)證。它是通過與標(biāo)準(zhǔn)HTML規(guī)則進(jìn)行比較的方式,分析HTML文檔、標(biāo)記出錯(cuò)誤和非標(biāo)準(zhǔn)代碼的處理過程。Web頁(yè)面使用HTML進(jìn)行渲染,而HTML本身采用了HTML規(guī)范作為其規(guī)則和標(biāo)準(zhǔn)。通過驗(yàn)證HTML代碼穿越多重瀏覽器標(biāo)準(zhǔn)!chanchan又稱之為
推薦度:
導(dǎo)讀Go元素的關(guān)鍵字所在--chan通道:HTML validate是指HTML驗(yàn)證。它是通過與標(biāo)準(zhǔn)HTML規(guī)則進(jìn)行比較的方式,分析HTML文檔、標(biāo)記出錯(cuò)誤和非標(biāo)準(zhǔn)代碼的處理過程。Web頁(yè)面使用HTML進(jìn)行渲染,而HTML本身采用了HTML規(guī)范作為其規(guī)則和標(biāo)準(zhǔn)。通過驗(yàn)證HTML代碼穿越多重瀏覽器標(biāo)準(zhǔn)!chanchan又稱之為

讀取通道操作:

val,ok := <-ch

使用斷言讀取通道中的值,檢查通道是否還有內(nèi)容,以及判斷通道是否已經(jīng)關(guān)閉,當(dāng)通道中沒有信息,且通道已經(jīng)關(guān)閉時(shí),ok值為false,當(dāng)通道沒有關(guān)閉,但是通道中沒有信息,程序?qū)?huì)阻塞,如果通道中有內(nèi)容,則ok值是true。

另一種不使用斷言的方式讀取通道

val := <-ch

寫入與讀取通道

讀取不帶緩沖的通道示例方法:

package mainimport ( "fmt")func main() { // 定義一個(gè)不帶緩沖的通道,通道中數(shù)據(jù)類型是int
 var c = make(chan int) // 開啟一個(gè)攜程,讀取通道中的內(nèi)容
 go func() {
 fmt.Println("寫入信息是:", <-c)
 }() // 向通道中寫入數(shù)據(jù)
 c <- 1}

輸出結(jié)果:

寫入信息是: 1

當(dāng)對(duì)帶緩沖的通道進(jìn)行讀寫時(shí),只要通道中數(shù)據(jù)長(zhǎng)度不大于緩沖長(zhǎng)度,就不會(huì)出現(xiàn)阻塞,但是讀取帶緩沖的通道,通道中沒有內(nèi)容時(shí),程序依然會(huì)進(jìn)入阻塞狀態(tài)。所以,帶緩沖的通道,只對(duì)寫入產(chǎn)生影響。下邊來一個(gè)示例:

package mainimport ( "fmt")func main() { var c = make(chan int, 3)
 c <- 1
 c <- 2
 c <- 3
 //c <- 4
 fmt.Println("end")
}

輸出信息是:

end

當(dāng)向帶3個(gè)緩沖的通道中寫入內(nèi)容時(shí),由于只寫入了3次,通道的長(zhǎng)度剛好等于緩沖的長(zhǎng)度,程序沒有阻塞,當(dāng)將 c <- 4 前邊的注釋去掉后,由于沒有程序去讀取這個(gè)通道,主程序進(jìn)入死鎖狀態(tài)而導(dǎo)致異常。

協(xié)程通信

通道類型變量的實(shí)質(zhì)上是一個(gè)地址,如下邊示例代碼:

package mainimport ( "fmt")func main() { var c = make(chan int, 3)
 fmt.Println(c)
}

輸出結(jié)果:

0xc042072080

所以,當(dāng)通道類型變量當(dāng)做參數(shù)傳入函數(shù)后,在函數(shù)中可以直接對(duì)通道中的值進(jìn)行修改。雖然chan類型變量是一個(gè)地址,但是golang不允許使用取值操作符( * )來操作chan類型變量。但是如果你先對(duì)chan類型變量使用取地址操作符(&),然后再使用取值操作符(*),這種操作方法還是可以正常運(yùn)行的,但是這意義不大,除非你的目的是在函數(shù)調(diào)用中,重新定義一個(gè)chan類型變量替換原來的變量。

chan的這些特性,可以很好的實(shí)現(xiàn)協(xié)程之間的同步功能。不帶緩沖的通道,是一種零容忍的等待,可以實(shí)現(xiàn)強(qiáng)制同步;帶緩沖的通道,是有一定量容忍度的等待,可以實(shí)現(xiàn)允許有一定時(shí)間差的同步。

簡(jiǎn)單的協(xié)程間通信例子:

package mainimport ( "fmt"
 "time")func main() { var c = make(chan int) go func() {
 fmt.Println("待命模式:") // 讀取通道時(shí)產(chǎn)生阻塞,等待其他協(xié)程向通道寫入信息
 fmt.Println("命令代碼是:", <-c)
 }() go func() { // 延時(shí)3秒,向通道中寫入信息
 time.Sleep(time.Second * 3)
 fmt.Println("發(fā)送命令:")
 c <- 8
 close(c)
 }()
 time.Sleep(time.Second * 5)
 fmt.Println("執(zhí)行完成")
}

輸出信息是:

待命模式:
發(fā)送命令:
命令代碼是: 8
執(zhí)行完成

相關(guān)推薦:

HTML validate HTML驗(yàn)證_HTML/Xhtml_網(wǎng)頁(yè)制作

HTML技巧匯編_CSS/HTML

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

Go元素的關(guān)鍵字所在--chan通道

Go元素的關(guān)鍵字所在--chan通道:HTML validate是指HTML驗(yàn)證。它是通過與標(biāo)準(zhǔn)HTML規(guī)則進(jìn)行比較的方式,分析HTML文檔、標(biāo)記出錯(cuò)誤和非標(biāo)準(zhǔn)代碼的處理過程。Web頁(yè)面使用HTML進(jìn)行渲染,而HTML本身采用了HTML規(guī)范作為其規(guī)則和標(biāo)準(zhǔn)。通過驗(yàn)證HTML代碼穿越多重瀏覽器標(biāo)準(zhǔn)!chanchan又稱之為
推薦度:
標(biāo)簽: 通道 關(guān)鍵字 go
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top