您好,登錄后才能下訂單哦!
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的詳細內容,更多請關注億速云其它相關文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。