Go by Example: Channel Buffering

預設的 channels 是 unbuffered,表示只有在有對應的接收(<- chan)準備好接收所傳送值時,才會接受傳送(chan <-)。Buffered channels 可接受有限數值的傳送,而這些值沒有對應的接收者。

package main
import "fmt"
func main() {

我們在此 make 一個最多可以快取 2 個字串值的 channel。

    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