Sobes.tech
Junior — Middle

Μπορείτε να εξηγήσετε πώς λειτουργεί ο μηχανισμός αναμονής για την ολοκλήρωση πολλαπλών goroutines στο Go χρησιμοποιώντας το WaitGroup;

sobes.tech AI

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

Στην Go, για να περιμένουμε την ολοκλήρωση πολλαπλών goroutines, χρησιμοποιείται ο τύπος sync.WaitGroup. Επιτρέπει να "εγγραφείτε" σε πολλές goroutines και να μπλοκάρετε την εκτέλεση μέχρι να ολοκληρωθούν όλες.

Βασικές μέθοδοι του WaitGroup:

  • Add(n int) — αυξάνει τον μετρητή κατά n, καλείται συνήθως πριν την εκκίνηση των goroutines.
  • Done() — μειώνει τον μετρητή κατά 1, καλείται στο τέλος κάθε goroutine.
  • Wait() — μπλοκάρει την εκτέλεση μέχρι ο μετρητής να γίνει 0.

Παράδειγμα χρήσης:

var wg sync.WaitGroup

wg.Add(3) // περιμένουμε 3 goroutines

for i := 0; i < 3; i++ {
    go func(id int) {
        defer wg.Done() // σηματοδοτεί το τέλος
        fmt.Printf("Goroutine %d σε εξέλιξη\n", id)
        // κάποια εργασία
    }(i)
}

wg.Wait() // περιμένουμε να ολοκληρωθούν όλες οι goroutines
fmt.Println("Όλες οι goroutines ολοκληρώθηκαν")