Sobes.tech
Junior — Middle

Ar galite paaiškinti, kaip veikia laukimo mechanizmas, kuris laukia kelių gorutinų pabaigos Go kalboje naudojant WaitGroup?

sobes.tech AI

Atsakymas iš AI

Go kalboje naudojamas sync.WaitGroup tipas, norint laukti kelių gorutinų pabaigos. Jis leidžia "užsiprenumeruoti" kelioms gorutinoms ir blokuoti vykdymą iki tol, kol visos jos nesibaigs.

Pagrindiniai WaitGroup metodai:

  • Add(n int) — padidina skaitiklį n, dažniausiai kviečiamas prieš paleidžiant gorutinas.
  • Done() — sumažina skaitiklį 1, kviečiamas kiekvienos gorutinės pabaigoje.
  • Wait() — blokuoja vykdymą iki skaitiklis pasieks 0.

Pavyzdys:

var wg sync.WaitGroup

wg.Add(3) // laukiame 3 gorutinų

for i := 0; i < 3; i++ {
    go func(id int) {
        defer wg.Done() // signalizuojame apie pabaigą
        fmt.Printf("Gorutina %d vyksta\n", id)
        // tam tikras darbas
    }(i)
}

wg.Wait() // laukiame, kol visos gorutinos baigsis
fmt.Println("Visos gorutinos baigėsi")