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