Junior — Middle
Какво се случва, ако се опитате да прочетете данни от канал, който в момента не съдържа елементи?
sobes.tech AI
Отговор от AI
В Go, ако се опитате да прочетете от канал, който в момента не съдържа елементи, поведението зависи от типа на канала:
- Буфериран канал: ако буферът е празен, четенето блокира, докато в канала не бъде записан елемент.
- Без буфер: четенето блокира, докато друга горутина не изпрати стойност.
Така, четенето от празен канал води до блокиране на текущата горутина, докато не се появят данни или каналът не бъде затворен.
Пример:
ch := make(chan int)
// Четенето от празен канал ще блокира изпълнението
val := <-ch // блокира, докато някой не изпрати стойност
// За да избегнете блокиране, можете да използвате select с default
select {
case val := <-ch:
fmt.Println("Получено", val)
default:
fmt.Println("Няма данни в канала")
}