Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: channel, unbuffered, buffered, one-way, goroutines

Какие типы каналов существуют?

Этот вопрос проверяет понимание каналов в Go, которые служат для передачи данных между горутинами.

Короткий ответ

В Go существуют три основных типа каналов:

  • Буферизированные (Buffered): позволяют отправлять данные в канал без немедленного получения.

  • Небуферизированные (Unbuffered): требуют, чтобы данные были одновременно отправлены и получены.

  • Однонаправленные (Directional): ограничены только отправкой или только получением данных.

Длинный ответ

Каналы в Go позволяют безопасно обмениваться данными между горутинами. Каждый тип канала имеет свои особенности:

Небуферизированные каналы:

  • Используются для синхронизации.

  • Отправка и получение блокируют выполнение горутин, пока другая сторона не выполнит соответствующую операцию.

ch := make(chan int)
go func() {
    	ch <- 42 // Заблокируется, пока другая горутина не примет значение
}()
fmt.Println(<-ch) // Получение значения

Буферизированные каналы:

  • Имеют ограниченную ёмкость.

  • Позволяют отправителю продолжать выполнение до заполнения буфера.

ch := make(chan int, 2)
ch <- 1
ch <- 2
fmt.Println(<-ch) // Получение первого значения
fmt.Println(<-ch) // Получение второго значения

Однонаправленные каналы:

  • Обеспечивают более строгий контроль над передачей данных.

  • Создаются с использованием приведения типа.

ch := make(chan int)
var sendOnly chan<- int = ch // Только отправка
var receiveOnly <-chan int = ch // Только получение

В каких случаях использовать:

  • Небуферизированные: для синхронизации между горутинами.

  • Буферизированные: для обработки больших объёмов данных с возможностью хранения.

  • Однонаправленные: для повышения читаемости и предотвращения ошибок при передаче данных.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • Golang

    Golang

Ключевые слова

#channel

#unbuffered

#buffered

#one-way

#goroutines

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.