Junior — Middle
Šta se dešava ako pokušate da pročitate podatke iz kanala koji trenutno ne sadrži elemente?
sobes.tech АИ
Одговор од АИ
U Go, ako pokušate da pročitate iz kanala koji trenutno ne sadrži elemente, ponašanje zavisi od tipa kanala:
- Bufferirani kanal: ako je buffer prazan, čitanje se blokira dok se ne upiše element u kanal.
- Bez buffer: čitanje se blokira dok druga gorutina ne pošalje vrednost.
Dakle, čitanje iz praznog kanala dovodi do blokiranja trenutne gorutine dok se ne pojave podaci ili se kanal ne zatvori.
Primer:
ch := make(chan int)
// Čitanje iz praznog kanala će blokirati izvršavanje
val := <-ch // blokira dok neko ne pošalje vrednost
// Da biste izbegli blokiranje, možete koristiti select sa default
select {
case val := <-ch:
fmt.Println("Primljeno", val)
default:
fmt.Println("Nema podataka u kanalu")
}