Junior — Middle
Kako realizovati sekvencijalno izvršavanje više gorutina sa prenosom podataka između njih?
sobes.tech АИ
Одговор од АИ
U Go jeziku, za sekvencijalno izvršavanje više gorutina sa prenosom podataka između njih, mogu se koristiti sledeći načini:
- Kanali (channels) — glavni i najidiomatičniji način prenosa podataka između gorutina. Možete kreirati kanal putem kojeg jedna gorutina šalje podatke, a sledeća ih prima i obrađuje, zatim ih prosleđuje dalje.
ch1 := make(chan int)
ch2 := make(chan int)
// Prva gorutina
go func() {
ch1 <- 42 // slanje podataka
}()
// Druga gorutina
go func() {
val := <-ch1 // primanje podataka
ch2 <- val * 2
}()
// Glavna gorutina prima rezultat
result := <-ch2
fmt.Println(result) // 84
-
WaitGroup + kanali — za kontrolu završetka gorutina i sekvencu.
-
Prenos podataka putem zatvaranja ili sinhronizovanih struktura — manje uobičajeno, ali moguće.
-
Korišćenje konteksta (context.Context) — za upravljanje vremenom trajanja i otkazivanjem, ali ne za direktan prenos podataka.
Kanali su najjednostavniji i najpouzdaniji način za organizovanje sekvencijalne obrade sa prenosom podataka između gorutina.