預設的 channels 是 unbuffered,表示只有在有對應的接收(<- chan)準備好接收所傳送值時,才會接受傳送(chan <-)。Buffered channels 可接受有限數值的傳送,而這些值沒有對應的接收者。
<- chan
chan <-
package main
import "fmt"
func main() {
我們在此 make 一個最多可以快取 2 個字串值的 channel。
make
messages := make(chan string, 2)
由於這個 channel 有快取,我們可以在沒有對應並行的接收的情況下將這些值傳送至 channel。
messages <- "buffered" messages <- "channel"
稍後我們可以照常接收這兩個值。
fmt.Println(<-messages) fmt.Println(<-messages) }
$ go run channel-buffering.go buffered channel
下一個範例:Channel Synchronization。
作者 Mark McGranaghan 和 Eli Bendersky | 原始碼 | 授權