Channel:Go語言建立併發通訊的橋樑
👨💻簡介 昨天講到Goroutine有稍微簡單介紹Channel,Channel是Go語言中極為重要的併發通訊機制,它就像是不同goroutines之間的話筒,允許它們安全地傳遞資料和信息。這個強大的工具使得Go語言在處理併發任務時非常優雅和高效。通過Channel,可以協調goroutines的操作,防止競爭條件,並實現高效的併發程式設計。 什麼是Channel? Channel是Go語言中一個強大的併發原語言功能,用於在不同的goroutine之間傳遞資料。它們提供了一種通訊的機制,可以讓goroutines之間安全地交換信息,而不需要額外的互斥鎖或信號量。 可以把channel比喻成傳紙條,傳紙條可以是單向,也可以是雙向,單向可以想像類似以前傳紙條的中間人,他只接收和傳遞,紙條也有大小的限制,寫滿了就不能再繼續寫,並且需要等待對方將紙條進行回覆後你才能繼續。 建立和使用Channel 在Go中,可以使用內建的make函數來建立一個新的Channel。以下是使用 make函數建立整數類型的Channel ch := make(chan int) 建立完後,就可以將資料發送到Channel中,然後在其他goroutine中接收它們。以下是一個簡單的發送和接收資料的例子: func main() { ch := make(chan int) go func() { ch <- 42 // 發送資料到Channel }() value := <-ch // 從Channel接收資料 fmt.Println(value) // 輸出:42 } 這個例子中,我們建立了一個goroutine,它將數字42發送到Channel,然後主goroutine,也就是main函數,接收到這個數字。 關閉Channel 紙條用完會丟掉,Channel用完也是要關掉,您可能需要關閉Channel,以通知接收方不再有新的資料可用。要關閉Channel,可以使用close函數,如下所示: close(ch) 接收方可以使用特殊的語法來檢查Channel是否已關閉: value, ok := <-ch if !ok { // Channel已經關閉 } 這可以防止接收方在Channel已關閉的情況下繼續等待。 並且已經關閉的Channel依然可以進行接收的操作,但不能再進行發送。 package main import ( "fmt" "time" ) func main() { ch := make(chan int) go func() { for i := 0; i < 5; i++ { time....