go 語言中使用 channel 和 goroutine 通信。創建 channel 后,goroutine 可以通過
Go 語言中通過 channel 與 goroutine 通信
在 Go 語言中,channel 是用于在 goroutine 之間通信的一種并發機制。它允許 goroutine 在不同線程中交換數據,從而實現高性能并發編程。
創建 channel
要創建一個 channel,可以使用 make
函數:
ch := make(chan int)
登錄后復制
make
函數的第一個參數指定 channel 的數據類型。在上面的示例中,我們創建了一個整型 channel。
發送數據
要向 channel 發送數據,可以使用 <-
運算符:
ch <- 42
登錄后復制
這會將值 42
發送到 channel 中。
接收數據
要從 channel 中接收數據,可以使用 <-
運算符:
v := <- ch
登錄后復制
這會在 channel 中接收一個值并將其存儲在變量 v
中。
實戰案例
下面是一個實戰案例,展示了如何使用 channel 讓 goroutine 向主線程發送數據:
package main import ( "fmt" "sync" ) func main() { var wg sync.WaitGroup ch := make(chan int) // 啟動一個 goroutine 來向 channel 發送數據 wg.Add(1) go func() { defer wg.Done() for i := 0; i < 10; i++ { ch <- i } close(ch) // 關閉 channel 以表示發送完成 }() // 從 channel 中接收數據并打印 for v := range ch { fmt.Println(v) } wg.Wait() // 等待 goroutine 完成 }
登錄后復制
在這個示例中,我們創建一個 goroutine,它向 channel 發送 10 個值(0 到 9)。主 goroutine 從 channel 中接收數據并打印它。close(ch)
語句用于關閉 channel,表示 goroutine 已發送所有數據。
通過使用 channel,我們可以輕松地讓 goroutine 在不同的線程中交換數據,從而實現高效的并發編程。