Go語言併發列印(借助通道實現)

2021-10-02 16:36:21 字數 551 閱讀 4456

之前的例子建立的都是無緩衝通道。使用無緩衝通道往裡面裝資料時,裝入方將被阻塞,直到另外通道在另乙個goroutine中被取出,同時,如果通道中沒有放入任何資料,接收方試圖從通道中獲取資料時,同樣也是阻塞。傳送和接收的操作是同步完成的。

下面介紹乙個併發列印的例子,將goroutine和channel放在一起展示它們的用法;

package main

import

"fmt"

func

printer(c

chan int)

//列印資料

fmt.println(data)}

//通知main已經結束迴圈(我搞定了)

c <- 0}

func

main()

//通知併發的printer結束迴圈(沒有資料啦)

c <- 0

//等待printer結束(搞定喊我)

<-c

}執行輸出:1 23

4567

89

10成功: 程序退出** 0.

**說明:

go 通道 go語言通道channel

通過使用通道,在多個goroutine傳送和接受共享的資料,達到資料同步的目的。通道,他有點像在兩個routine之間架設的管道,乙個goroutine可以往這個管道裡塞資料,另外乙個可以從這個管道裡取資料,有點類似於我們說的佇列。宣告乙個通道很簡單,我們使用chan關鍵字即可,除此之外,還要指定通...

Go語言最佳實踐 通道和併發

何時關閉通道 第一,只有在後面要檢查通道是否關閉的時候才需要顯式地關閉通道 第二,應該由傳送端的goroutine關閉通道,而不是由接收端的goroutine來完成 第三,如果通道並不需要檢查是否被關閉,那麼不關閉這些通道並沒有什麼問題,因為通道非常輕量,因此它不會像開啟檔案不關閉那樣耗盡系統資源。...

Go語言程式設計基礎 併發 一 Go程 通道

go程 goroutine 是由go執行時管理的輕量級執行緒。啟動乙個go程並執行f x,y,z gof x,y,z package main import fmt time func fff s string func main 通道是帶有型別的管道,可以使用通道操作符 來傳送或接收值。將v傳送至...