Junior — Middle
Kaip surinkti ir apdoroti penkių vienu metu paleistų gorutinų rezultatus?
sobes.tech AI
Atsakymas iš AI
Norint vienu metu paleisti penkias gorutinas ir surinkti jų rezultatus, galite naudoti kanalus (channels) Go kalboje. Kiekviena gorutina siunčia savo rezultatą į kanalą, o pagrindinė funkcija skaito iš kanalo reikiamą kartų skaičių.
Pavyzdys:
package main
import (
"fmt"
"sync"
)
func worker(id int, ch chan<- int, wg *sync.WaitGroup) {
defer wg.Done()
// kažkoks darbas
result := id * 2
ch <- result
}
func main() {
ch := make(chan int, 5) // buferinis kanalas
var wg sync.WaitGroup
for i := 1; i <= 5; i++ {
wg.Add(1)
go worker(i, ch, &wg)
}
wg.Wait()
close(ch)
for res := range ch {
fmt.Println("Rezultatas:", res)
}
}
Čia, worker yra gorutina, kuri skaičiuoja rezultatą ir siunčia jį į kanalą. Pagrindinė funkcija laukia, kol baigsis visos gorutinos, naudodama WaitGroup, tada uždaro kanalą ir skaito visus rezultatus.