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.