Junior — Middle
Да ли је могућа операција читања из канала без коришћења буфера?
sobes.tech АИ
Одговор од АИ
U Go, operacija čitanja iz kanala (chan) bez korišćenja bafera moguća je samo ako je kanal sa baferom. Ako kanal nema bafer (veličina 0), operacija čitanja blokira dok se ne pošalje vrednost u kanal.
Dakle:
- Za neblokirajuće čitanje bez bafera, potrebno je koristiti neblokirajuće operacije sa kanalom (npr. putem
selectsadefault), ali to ne garantuje primanje podataka. - Ako kanal nema bafer, čitanje uvek blokira dok neko ne pošalje podatke.
Primer kanala sa baferom:
ch := make(chan int, 1) // bafer od 1 elementa
ch <- 42 // slanje vrednosti
val := <-ch // čitanje bez blokiranja
Ako kanal nema bafer, čitanje i pisanje se sinhronizuju direktno između gorutina.