Введение
Этот лабораторный проект旨在测试您对 Golang 中缓冲通道的理解。
Буферизация каналов
По умолчанию каналы в Golang не буферизированы, что означает, что они принимают отправку (chan <-), только если есть соответствующее получение (<- chan), готовое принять отправленное значение. Однако, буферизированные каналы могут принимать ограниченное количество значений без соответствующего приемника для этих значений. В этом лабораторном проекте вам нужно создать буферизированный канал и отправить в него значения без соответствующего параллельного приема.
- Основы знаний о каналах в Golang
- Понимание буферизированных каналов
$ go run channel-buffering.go
буферизированный
канал
Ниже представлен полный код:
// По умолчанию каналы _не буферизированы_, что означает, что они
// будут принимать отправку (`chan <-`), только если есть
// соответствующее получение (`<- chan`), готовое принять
// отправленное значение. _Буферизированные каналы_ могут принимать
// ограниченное количество значений без соответствующего приемника
// для этих значений.
package main
import "fmt"
func main() {
// Здесь мы `make` канал строк, буферизирующий до
// 2 значений.
messages := make(chan string, 2)
// Поскольку этот канал буферизирован, мы можем отправить эти
// значения в канал без соответствующего параллельного приема.
messages <- "буферизированный"
messages <- "канал"
// Позже мы можем получить эти два значения, как обычно.
fmt.Println(<-messages)
fmt.Println(<-messages)
}
Резюме
В этом лабораторном проекте вы узнали, как создать буферизированный канал в Golang и отправить в него значения без соответствующего параллельного приема. Это полезно в ситуациях, когда вы хотите отправить значения в канал, не блокируя отправителя.