Как бы написал канал

«Как бы написал канал» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

ch := make(chan int) // небуферизированный канал
bufferedCh := make(chan string, 10) // буферизированный на 10 элементов

// Отправка данных
ch <- 42
bufferedCh <- "hello"

// Получение данных
value := <-ch
msg := <-bufferedCh

// Закрытие канала
close(ch)

// Проверка на закрытие
v, ok := <-ch // ok == false если канал закрыт

// Итерация по каналу
for item := range bufferedCh {
    fmt.Println(item)
}

Основные моменты:

  • Каналы создаются через make()
  • Могут быть буферизированными и небуферизированными
  • Операции отправки/получения блокирующие (для небуферизированных)
  • Закрывать каналы должен отправитель
  • range работает до закрытия канала