Sobes.tech
Junior — Middle

Как се държи програмата при опит да запише данни в канал без буфер, ако той е първоначално празен?

sobes.tech AI

Отговор от AI

В Go, канал без буфер (размер на буфера = 0) е синхронен. Това означава, че при опит да запишете данни в такъв канал, ако в този момент няма готов получател, програмата се блокира и чака, докато друга горутина не прочете стойността от канала.

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

Пример:

ch := make(chan int) // канал без буфер

// Изпращане в отделна горутина
go func() {
    ch <- 42 // блокира, докато някой не прочете
}()

// Четене
val := <-ch // след четенето, изпращането се отключва
fmt.Println(val)