Буферизированные каналы в Go программировании

Beginner

This tutorial is from open-source community. Access the source code

Введение

Этот лабораторный проект旨在测试您对 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 и отправить в него значения без соответствующего параллельного приема. Это полезно в ситуациях, когда вы хотите отправить значения в канал, не блокируя отправителя.