Junior — Middle
Eyni zamanda işlədilən beş goroutine-in nəticələrini necə toplayıb işləyə bilərik?
sobes.tech Süni İntellekt
AI-dan cavab
Go-da eyni zamanda beş goroutine-i işə salıb onların nəticələrini toplamaq üçün kanallardan (channels) istifadə edə bilərsiniz. Hər goroutine nəticəsini kanala göndərir və əsas funksiya kanaldan lazım olan sayda oxuyur.
Nümunə:
package main
import (
"fmt"
"sync"
)
func worker(id int, ch chan<- int, wg *sync.WaitGroup) {
defer wg.Done()
// bəzi işlər
result := id * 2
ch <- result
}
func main() {
ch := make(chan int, 5) // tamponlu kanal
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("Nəticə:", res)
}
}
Burada, worker nəticəni hesablayan və kanala göndərən goroutinedir. Əsas funksiya WaitGroup ilə bütün goroutinlərin tamamlanmasını gözləyir, sonra kanalı bağlayır və bütün nəticələri oxuyur.