Sobes.tech
Junior — Middle

Kā realizēt vairākas goroutine secīgu izpildi ar datu pārraidi starp tām?

sobes.tech AI

Atbilde no AI

Go valodā, lai secīgi izpildītu vairākas gorutinas ar datu pārraidi starp tām, var izmantot šādus veidus:

  1. Kanāli (channels) — galvenais un visbiežāk lietotais veids datu pārraidīšanai starp gorutinām. Var izveidot kanālu, caur kuru viena gorutina sūta datus, bet nākamā tos saņem un apstrādā, pēc tam tos nodod tālāk.
ch1 := make(chan int)
ch2 := make(chan int)

// Pirmā gorutina
go func() {
    ch1 <- 42 // datu sūtīšana
}()

// Otrā gorutina
go func() {
    val := <-ch1 // datu saņemšana
    ch2 <- val * 2
}()

// Galvenā gorutina saņem rezultātu
result := <-ch2
fmt.Println(result) // 84
  1. WaitGroup + kanāli — gorutinu pabeigšanas un secības kontrole.

  2. Datu pārraide caur aizvēršanām vai sinhronizētām struktūrām — mazāk izplatīts, bet iespējams.

  3. Konteksta (context.Context) izmantošana — dzīves ilguma un atcelšanas pārvaldībai, bet ne tiešai datu pārraidīšanai.

Kanāli ir vienkāršākais un uzticamākais veids, kā organizēt secīgu apstrādi ar datu pārraidi starp gorutinām.