Sobes.tech
Назад к вопросам
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.