Введение
Этот лабораторный проект旨在测试您对Golang中缓冲通道的理解。
This tutorial is from open-source community. Access the source code
💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал
Этот лабораторный проект旨在测试您对Golang中缓冲通道的理解。
По умолчанию каналы в Golang не буферизированы, что означает, что они принимают отправку (chan <-
), только если есть соответствующее получение (<- chan
), готовое принять отправленное значение. Однако, буферизированные каналы могут принимать ограниченное количество значений без соответствующего приемника для этих значений. В этом лабораторном проекте вам нужно создать буферизированный канал и отправить в него значения без соответствующего параллельного приема.
$ 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 и отправить в него значения без соответствующего параллельного приема. Это полезно в ситуациях, когда вы хотите отправить значения в канал, не блокируя отправителя.