Golang 中並發程式設計的利器:Channels
在並發程式設計中,執行緒間的通訊是一項非常重要的技術。在 Golang 中,Channels 成為了一種非常有用的並發原語。
什麼是 Channels?
Channel 是 Golang 提供的一種類型,用於在不同的 Goroutine(輕量級執行緒)之間進行通訊和資料交換。它類似於一個管道,可以在不同的 Goroutine 之間傳遞資料。
Channels 的宣告方式如下:
var ch chan T
其中,T 代表傳輸的資料類型。在創建channel 時,需要使用make 函數進行初始化:
ch := make(chan T)
Channels 的特點
ch <- data
data <- ch
package main import ( "fmt" "time" ) func counter(ch chan int) { for i := 0; i < 5; i++ { ch <- i // 将数据写入到 Channel 中 fmt.Println("Sent:", i) time.Sleep(time.Second) // 休眠 1 秒钟 } close(ch) // 关闭 Channel } func main() { ch := make(chan int) // 创建一个 int 类型的 Channel go counter(ch) // 启动一个 Goroutine 来执行计数器函数 // 从 Channel 中读取数据,直到 Channel 被关闭 for i := range ch { fmt.Println("Received:", i) } }
counter 函數,用於將 0 到 4 這 5 個數字傳送到 Channel 中。然後,在
main 函數中,我們使用
range 關鍵字從 Channel 接收數據,並列印出來。
counter 函數中使用了
time.Sleep(time.Second) 來模擬計數器每發送一個數字後休眠 1 秒鐘。這是為了示範在不同的 Goroutine 之間協作的效果。
以上是Golang 中並發程式設計的利器:Channels的詳細內容。更多資訊請關注PHP中文網其他相關文章!