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