Sobes.tech
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 select sa default), 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.