Junior — Middle
Ako realizovať sekvenčné vykonávanie viacerých gorutín s prenosom dát medzi nimi?
sobes.tech AI
Odpoveď od AI
V jazyku Go môžete na sekvenčné vykonávanie viacerých gorutín s prenosom dát medzi nimi použiť nasledujúce spôsoby:
- Kanály (channels) — hlavný a najidiomatickejší spôsob prenosu dát medzi gorutinami. Môžete vytvoriť kanál, ktorým jedna gorutina odosiela dáta, a ďalšia ich prijíma a spracováva, potom ich odovzdáva ďalej.
ch1 := make(chan int)
ch2 := make(chan int)
// Prvá gorutina
go func() {
ch1 <- 42 // odoslanie dát
}()
// Druhá gorutina
go func() {
val := <-ch1 // prijatie dát
ch2 <- val * 2
}()
// Hlavná gorutina prijíma výsledok
result := <-ch2
fmt.Println(result) // 84
-
WaitGroup + kanály — na kontrolu dokončenia gorutín a sekvencie.
-
Prenos dát cez uzávery alebo synchronizované štruktúry — menej rozšírené, ale možné.
-
Použitie kontextu (context.Context) — na správu životnosti a zrušenia, ale nie na priame prenosy dát.
Kanály sú najjednoduchší a najspoľahlivejší spôsob organizácie sekvenčného spracovania s prenosom dát medzi gorutinami.