Sobes.tech
Junior — Middle

Πώς μπορούμε να συλλέξουμε και να επεξεργαστούμε τα αποτελέσματα πέντε ταυτόχρονων goroutines;

sobes.tech AI

Απάντηση από AI

Για να εκτελέσετε πέντε goroutines ταυτόχρονα και να συλλέξετε τα αποτελέσματά τους, μπορείτε να χρησιμοποιήσετε κανάλια (channels) στη Go. Κάθε goroutine στέλνει το αποτέλεσμα στο κανάλι, και η κύρια λειτουργία διαβάζει από το κανάλι τον απαιτούμενο αριθμό φορών.

Παράδειγμα:

package main

import (
    "fmt"
    "sync"
)

func worker(id int, ch chan<- int, wg *sync.WaitGroup) {
    defer wg.Done()
    // κάποια εργασία
    result := id * 2
    ch <- result
}

func main() {
    ch := make(chan int, 5) // κανάλι με buffer
    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("Αποτέλεσμα:", res)
    }
}

Εδώ, το worker είναι μια goroutine που υπολογίζει το αποτέλεσμα και το στέλνει στο κανάλι. Η κύρια λειτουργία περιμένει να ολοκληρωθούν όλες οι goroutines μέσω του WaitGroup, στη συνέχεια κλείνει το κανάλι και διαβάζει όλα τα αποτελέσματα.