之前的例子建立的都是無緩衝通道。使用無緩衝通道往裡面裝資料時,裝入方將被阻塞,直到另外通道在另乙個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傳送至...