Sobes.tech
Junior — Middle
113

Деректер жазылған кезде арнада нақты не болады?

Сұралған компаниялар
BWG

AI-дан жауап

sobes.tech AI

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

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

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

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

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

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

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