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

  1. 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
  1. WaitGroup + kanály — na kontrolu dokončenia gorutín a sekvencie.

  2. Prenos dát cez uzávery alebo synchronizované štruktúry — menej rozšírené, ale možné.

  3. 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.