Senior
Koji od sledećih delova koda sadrži grešku ili potencijalni problem u vezi sa radom sa kanalima? Opcija 1 package main func main() { ch := make(chan int) ch <- 1 } Opcija 2 package main func main() { ch := make(chan int, 1) ch <- 1 } Opcija 3 package main func main() { ch := make(chan int, 1) ch <- 1 <-ch } Opcija 4 package main func main() { ch := make(chan int) close(ch) <-ch } Opcija 5 package main func main() { ch := make(chan int, 3) ch <- 4 }
sobes.tech АИ
Одговор од АИ
Greška je u Opciji 1:
package main
func main() {
ch := make(chan int)
ch <- 1
}
Ovde se kreira nebufferirani kanal ch := make(chan int). Slanje u taj kanal ch <- 1 blokiraće dok neko ne pročita iz kanala. U ovom kodu nema primaoca, pa će program zauvek biti blokiran (deadlock).
Opcija 2 je tačna, jer je kanal sa bufferom od 1, i slanje se ne blokira ako buffer nije pun.
Opcija 3 je takođe tačna: slanje i primanje su uravnoteženi.
Opcija 4 je tačna: može se čitati iz zatvorenog kanala, čitanje će vratiti nultu vrednost i neće blokirati.
Opcija 5 je tačna: buffer 3, šalje se jedna vrednost, buffer nije pun.
Ukratko, problem je samo u Opciji 1 — blokada pri slanju u nebufferirani kanal bez primaoca.