Back to questions
Senior
2
Какие правила (аксиомы) работы с каналами существуют в Go?
Companies where asked
RedLab
Answer from AI
sobes.tech AI
В Go каналы (channels) используются для коммуникации между горутинами и имеют несколько ключевых правил (аксиом):
- Канал — это типизированная очередь, которая обеспечивает синхронизацию между отправителем и получателем.
- Отправка в канал блокирует горутину, если буфер канала заполнен (для буферизированных каналов) или если нет получателя (для небуферизированных).
- Приём из канала блокирует горутину, если канал пуст.
- Закрытие канала (
close(ch)) сигнализирует, что больше не будет отправок; при этом приём из закрытого канала возвращает нулевое значение иfalseво втором параметре. - Нельзя отправлять в закрытый канал — это приведёт к панике.
- Каналы можно использовать для передачи данных и синхронизации, но не для хранения состояния.
Пример:
ch := make(chan int, 1) // буферизированный канал
ch <- 42 // отправка
val := <-ch // приём
close(ch) // закрытие канала
v, ok := <-ch // ok == false, если канал закрыт и пуст
Эти правила обеспечивают безопасное и предсказуемое взаимодействие между горутинами через каналы.