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

溫馨提示×

溫馨提示×

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

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

goroutine/channel(2)

發布時間:2020-07-17 08:30:19 來源:網絡 閱讀:362 作者:梁十八 欄目:編程語言
package main

import "fmt"

func main() {

    dataChan := make(chan int, 5)
    syncChan1 := make(chan struct{}, 1)
    syncChan2 := make(chan struct{}, 2)

    //演示接收操作
    go func() {
        <- syncChan1
        for {
            if elem, ok := <- dataChan; ok {
                fmt.Printf("Received: %d [receiver]\n", elem)
            } else {
                break
            }
        }
        fmt.Println("Done. [receiver]")
        syncChan2 <- struct{}{}
    }()

    //演示發送操作
    go func() {
        for i := 0; i < 5; i++ {
            dataChan <- i
            fmt.Printf("Sent: %d [sender]\n", i)
        }
        close(dataChan)
        syncChan1 <- struct{}{}
        fmt.Println("Done. [sender]")
        syncChan2 <- struct{}{}
    }()

    <-syncChan2
    <-syncChan2

}

輸出:
Sent: 0 [sender]
Sent: 1 [sender]
Sent: 2 [sender]
Sent: 3 [sender]
Sent: 4 [sender]
Done. [sender]
Received: 0 [receiver]
Received: 1 [receiver]
Received: 2 [receiver]
Received: 3 [receiver]
Received: 4 [receiver]
Done. [receiver]

Process finished with exit code 0

調用close函數可以關閉一個通道。但是,這樣做的時候一定要特別注意:試圖向一個已經關閉的通道發送元素時,會讓發送操作引起運行時恐慌。因此,你總是應該保證安全的前提下關閉通道。這會設計到一些技巧,比如for語句和select語句。無論怎樣都不應該在接收端關閉通道。因為在接收端通常無法判斷發送端是否還會向該通道發送元素。另一方面,在發送端關閉通道一般不會對接收端的接收操作產生什么影響。如果通道在被關閉時其中仍然有元素,你依然可以接收表達式取出,并根據該表達式的第二個結果判斷通道是否已無元素可取。
上面的例子:在發送方,我在向通道dataChan發送完所有元素并關閉通道后,才告知接收方開始接收。雖然通道已經關閉,但是對接收操作并無影響,接收方依然可以在接收完所有元素后自行結束。
最后還有兩點要注意:
1.對弈同一個通道,僅允許關閉一次,對通道的重復關閉會引發運行恐慌。
2.在調用close函數時,你需要把代表欲關閉的那個通道的變量作為參數傳入。如果此時該變量的值為nil,就會引發運行時恐慌

單向channel:
一個只進步出的通道沒有任何意義。其實,單項通道應由雙向通道變換而來,我們可以用這種變換來約束程序對通道的使用方式:

向AI問一下細節

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

AI

伊宁县| 延寿县| 绥阳县| 丰县| 高雄市| 红河县| 喀什市| 东光县| 盱眙县| 平泉县| 邛崃市| 四川省| 肥乡县| 赤峰市| 德钦县| 南平市| 外汇| 洛扎县| 三河市| 平塘县| 晋江市| 铜鼓县| 岳池县| 曲松县| 玉溪市| 安塞县| 美姑县| 香格里拉县| 西峡县| 福鼎市| 晋州市| 平果县| 蓝山县| 高陵县| 五原县| 三亚市| 曲阜市| 桃园市| 婺源县| 梓潼县| 策勒县|