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