По подразбиране каналите са нескладиращи1,
което означава, че ще приемат изпратени данни (chan
<-) само ако има някой готов да ги получи (<- chan).
складиращите канали2 приемат ограничено
количество стойности без да има готов получател за тези
стойности.
import "fmt"
func main() {
Тук правим (make) канал за низове с вместимост до
две стойности.
messages := make(chan string, 2)
Понеже този канал е складиращ, можем да изпратим тези стойности по канала без съответстващо едновременно1 работещо за всяко изпращане получаване.
messages <- "складиращ"
messages <- "канал"
По-късно можем да получим тези две стойности както обикновено.
fmt.Println(<-messages)
fmt.Println(<-messages)
}
$ go run channel-buffering.go
складиращ
канал
Следващ пример: Съгласуване чрез канал.