Sobes.tech
Back to questions
Junior — Middle
85

Что именно происходит внутри канала при осуществлении записи данных в него?

Companies where asked
BWG

Answer from AI

sobes.tech AI

При записи данных в канал в Go происходит следующее:

  1. Если канал буферизированный и в буфере есть свободное место, значение помещается в буфер, и операция записи завершается сразу.
  2. Если канал небуферизированный или буфер заполнен, горутина, выполняющая запись, блокируется и ждёт, пока другая горутина не прочитает значение из канала.
  3. Когда значение передано, оно становится доступным для чтения другой горутине.

Таким образом, канал обеспечивает синхронизацию между горутинами, гарантируя, что данные не потеряются и передаются корректно.

Пример записи в канал:

ch := make(chan int) // небуферизированный канал

// Запись в канал (заблокируется, пока кто-то не прочитает)
go func() {
    ch <- 42
}()

val := <-ch // чтение из канала
fmt.Println(val) // выведет 42