首頁 >後端開發 >Golang >golang怎麼判斷channel是否關閉

golang怎麼判斷channel是否關閉

尚
原創
2020-01-13 09:31:459338瀏覽

golang怎麼判斷channel是否關閉

Map是一種無序的鍵值對的集合。 Map最重要的一點是透過key來快速檢索數據,key類似於索引,指向數據的值。

Map是一種集合,所以我們可以像迭代數組和切片那樣迭代它。不過,Map是無序的,我們無法決定它的回傳順序,這是因為Map是使用hash表來實現的。

下面我們來看golang中判斷channel是否關閉的方法:

#讀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知識請關注PHP中文網golang教程專欄。

以上是golang怎麼判斷channel是否關閉的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn