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

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Golang中的Channel詳解(一):定義與基本操作

Golang中的channel是不同goroutines之間進(jìn)行通信和同步的橋梁,借助channel,可以很方便寫多協(xié)程通信程序。

當(dāng)涂ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!

如何理解channel

Channel是一個協(xié)程安全的管道,一端寫入數(shù)據(jù),一端讀取數(shù)據(jù),寫入和讀取都是原子操作,有點(diǎn)類似于消息隊列,只不過channel是內(nèi)存級別的。在channel出現(xiàn)之前,需要手動管理共享內(nèi)存,這樣會帶來一定的復(fù)雜度和不可知的問題。而channel提供了一種更簡單、更安全的方式來進(jìn)行并發(fā)編程,借助channel,可以在不共享內(nèi)存的情況下實(shí)現(xiàn)多個goroutine之間的通信。

channel的基本操作

使用make()函數(shù)來創(chuàng)建一個channel示例,并且需要指定channel中元素的類型和容量(可選),例如:

ch := make(chan int)  // 創(chuàng)建一個int類型的channel

這條創(chuàng)建語句沒有指定容量,就是創(chuàng)建了一個無緩沖的channel,如果一個goroutine往這個channel發(fā)送數(shù)據(jù),那么這個oroutine就會被阻塞住,直到有其它goroutine讀取了channel 的數(shù)據(jù)才能繼續(xù)運(yùn)行。創(chuàng)建channel時如果指定了容量,就是有緩沖的channel,例如:

ch := make(chan int, 10) // 創(chuàng)建一個容量為10的int類型的channel

對于有緩沖的channel來說,只要當(dāng)前channel里的元素總數(shù)不大于這個指定的容量,當(dāng)前的goroutine就不會被阻塞住。

往channel寫數(shù)據(jù)使用<-操作符,例如:

ch := make(chan int)
 ch <- 1 //將值1發(fā)送到通道中

從channel讀取數(shù)據(jù)也是使用<-操作符,例如:

val := <- ch //從通道中接收上一個發(fā)送的值

當(dāng)不再使用channel時,使用close()方法關(guān)閉channel,例如:

close(ch)

當(dāng)channel關(guān)閉后,如果繼續(xù)往里面寫數(shù)據(jù),則會panic;如果繼續(xù)讀的話,不會產(chǎn)生panic,如果還有數(shù)據(jù)的話也可以讀到數(shù)據(jù),如果沒有數(shù)據(jù)的話將得到零值(對應(yīng)類型的默認(rèn)值)。判斷當(dāng)前channel是否被關(guān)閉,可以使用下面的寫法:

if v, ok := <-ch; !ok {
   fmt.Println("channel已關(guān)閉并且數(shù)據(jù)已被讀完")
 }

也可以使用for range的方式,讀取完數(shù)據(jù)后循環(huán)也隨著結(jié)束,例如:

for v := range ch {
  // ...
}

本文名稱:Golang中的Channel詳解(一):定義與基本操作
文章地址:http://www.5511xx.com/article/dpjshdc.html