Sobes.tech
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.