Senior
Кой от следните фрагменти с код съдържа грешка или потенциален проблем, свързан с работата с канали? Опция 1 package main func main() { ch := make(chan int) ch <- 1 } Опция 2 package main func main() { ch := make(chan int, 1) ch <- 1 } Опция 3 package main func main() { ch := make(chan int, 1) ch <- 1 <-ch } Опция 4 package main func main() { ch := make(chan int) close(ch) <-ch } Опция 5 package main func main() { ch := make(chan int, 3) ch <- 4 }
sobes.tech AI
Отговор от AI
Грешката е в Вариант 1:
package main
func main() {
ch := make(chan int)
ch <- 1
}
Тук се създава небуфериран канал ch := make(chan int). Изпращането към този канал ch <- 1 се блокира, докато някой не прочете от канала. В този код няма получател, затова програмата ще блокира завинаги (deadlock).
Вариант 2 е правилен, тъй като каналът е с буфер с размер 1, и изпращането не се блокира, ако буферът не е пълен.
Вариант 3 също е правилен: изпращането и получаването са балансирани.
Вариант 4 е правилен: може да се чете от затворен канал, четенето ще върне нулева стойност и няма да блокира.
Вариант 5 е правилен: буфер 3, изпраща се една стойност, буферът не е пълен.
Обобщено, проблемът е само в Вариант 1 — блокиране при изпращане към небуфериран канал без получател.