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