Назад к вопросам
Junior — Middle
77
Разрешено ли осуществлять отправку сообщений в один канал несколькими горутинами одновременно?
Ответ от нейросети
sobes.tech AI
Да, в Go разрешено отправлять сообщения в один канал из нескольких горутин одновременно. Каналы в Go являются потокобезопасными и обеспечивают синхронизацию между горутинами.
Однако важно помнить:
- Если несколько горутин пишут в один канал, а никто не читает, это приведёт к блокировке.
- Если канал буферизирован, записи будут блокироваться только при заполнении буфера.
- Нужно аккуратно управлять закрытием канала — закрывать канал должен только отправитель, и только когда он уверен, что больше не будет записей.
Пример:
ch := make(chan int)
// Запуск нескольких горутин, отправляющих данные в канал
for i := 0; i < 3; i++ {
go func(id int) {
ch <- id
}(i)
}
// Чтение из канала
for i := 0; i < 3; i++ {
fmt.Println(<-ch)
}
Таким образом, одновременная отправка в канал из нескольких горутин — стандартная практика в Go.