Middle
Šta je kanal u Go? Koje vrste kanala postoje? Čime se razlikuju kanali sa baferom od onih bez bafera?
sobes.tech АИ
Одговор од АИ
Канал u Go jezika je tip podataka koji se koristi za prenos vrednosti između gorutina, obezbeđujući sinhronizaciju i razmenu podataka.
Vrste kanala:
- Kanali bez bafera — nemaju unutrašnji bafer, slanje se blokira dok primalac ne pročita vrednost.
- Kanali sa baferom — imaju unutrašnji bafer fiksne veličine, a slanje se blokira samo ako je bafer pun.
Razlike:
- U kanala bez bafera, pošiljalac i primalac moraju biti spremni istovremeno za slanje/prijem, što obezbeđuje strogu sinhronizaciju.
- U kanalima sa baferom, pošiljalac može staviti više vrednosti u bafer bez čekanja primaoca, dok se bafer ne napuni.
Primer kreiranja i korišćenja kanala sa baferom:
ch := make(chan int, 2) // bafer od 2 elementa
ch <- 1
ch <- 2
// ch <- 3 // blokira dok se ne oslobodi mesto
fmt.Println(<-ch) // 1
fmt.Println(<-ch) // 2