Назад к вопросам
Wildberries
МТС
Avito
OZON
Купер
Junior — Middle
209
Какие разновидности каналов используются в языке Go для коммуникации между горутинами?
Компании, где спрашивали
Lamoda Tech
Evrone
IDT
Самокат Тех
BWG
Кадровое агентство BWG
Ответ от нейросети
sobes.tech AI
В языке Go каналы (channels) используются для коммуникации между горутинами и бывают нескольких видов:
-
Буферизированные и небуферизированные каналы
- Небуферизированный канал — блокирует отправителя до тех пор, пока получатель не прочитает значение.
- Буферизированный канал — имеет внутренний буфер фиксированного размера, позволяющий отправлять несколько значений без блокировки, пока буфер не заполнится.
-
Однонаправленные каналы
- Каналы могут быть объявлены как только для отправки (
chan<- Type) или только для получения (<-chan Type), что помогает ограничить использование и повысить безопасность кода.
- Каналы могут быть объявлены как только для отправки (
Пример создания и использования буферизированного канала:
ch := make(chan int, 2) // буфер на 2 элемента
ch <- 1 // не блокируется
ch <- 2 // не блокируется
// ch <- 3 // блокируется, пока кто-то не прочитает
fmt.Println(<-ch) // 1
fmt.Println(<-ch) // 2
Таким образом, основные разновидности каналов в Go — это буферизированные/небуферизированные и однонаправленные/двунаправленные.