Sobes.tech
Junior — Middle

Kuidas koguda ja töödelda viie samaaegselt käivitatud gorutini tulemusi?

sobes.tech AI

Vastus AI-lt

Selleks, et samaegselt viit goroutine'i ja käivitada neid korraga ning koguda nende tulemusi, saab kasutada kanaleid (channels) Go keeles. Iga goroutine saadab oma tulemuse kanalile, ning peafunktsioon loeb kanalilt vajaliku arvu kordi.

Näide:

package main

import (
    "fmt"
    "sync"
)

func worker(id int, ch chan<- int, wg *sync.WaitGroup) {
    defer wg.Done()
    // mingi töö
    result := id * 2
    ch <- result
}

func main() {
    ch := make(chan int, 5) // buferkanal
    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("Tulemus:", res)
    }
}

Siin on worker goroutine, mis arvutab tulemuse ja saadab selle kanalile. Peafunktsioon ootab, kuni kõik gorutined on lõpetanud WaitGroup abil, siis sulgeb kanali ja loeb kõik tulemused.