91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

golang判斷channel已經close的方法

發布時間:2020-05-25 18:00:04 來源:億速云 閱讀:893 作者:鴿子 欄目:編程語言

channel有點類似于管道,它在goroutine同步與通信中,有著起承轉合的作用,同時也是Golang實現CSP模型的關鍵。

golang 中大部分類型都是值類型(只有 slice / channel / map 是引用類型),讀/寫類型是值類型的 channel 時,如果元素 size 比較大時,應該使用指針代替,避免頻繁的內存拷貝開銷。

golang判斷channel是否已經close的方法:

讀channel的時候判斷其是否已經關閉

_,ok := <- jobs

此時如果 channel 關閉,ok 值為 false

寫入channel的時候判斷其是否已經關閉

1、_,ok := <- jobs

此時如果 channel 關閉,ok 值為 false,如果 channel 沒有關閉,則會漏掉一個 jobs

2、使用 select 方式

再創建一個 channel,叫做 timeout,如果超時往這個 channel 發送 true,在生產者發送數據給 jobs 的 channel,用 select 監聽 timeout,如果超時則關閉 jobs 的 channel.

go func() {
 time.Sleep(time.Second * 3)
 timeout <- true
 }()
go func() {
 for i := 0; ; i++ {
 select {
     case <-timeout:
         close(jobs)
         return
 
     default:
         jobs <- i
         fmt.Println("produce:", i)
         }
     }
 }()

以上就是golang如何判斷channel已經close的詳細內容,更多請關注億速云其它相關文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

始兴县| 阳山县| 宁国市| 府谷县| 陈巴尔虎旗| 镶黄旗| 彰武县| 井陉县| 大田县| 灌云县| 综艺| 聊城市| 瓦房店市| 晋宁县| 清原| 嘉祥县| 张家界市| 叶城县| 突泉县| 明光市| 许昌县| 武穴市| 广东省| 南宫市| 海门市| 昌邑市| 黄骅市| 达日县| 兴宁市| 洞口县| 台安县| 甘谷县| 海丰县| 左云县| 望谟县| 汤阴县| 滦南县| 修武县| 林周县| 北安市| 北碚区|