Sobes.tech
Junior — Middle

Jak zajistit, aby všechny spuštěné gorutiny v programu byly dokončeny?

sobes.tech AI

Odpověď od AI

V jazyce Go neexistuje vestavěný způsob, jak násilně ukončit gorutinu zvenčí. Aby bylo zaručeno, že všechny spuštěné gorutiny dokončí svůj běh, obvykle se používá synchronizace pomocí sync.WaitGroup.

Princip fungování:

  • Před spuštěním každé gorutiny se zavolá wg.Add(1).
  • Na konci gorutiny se zavolá wg.Done().
  • V hlavní funkci se zavolá wg.Wait(), které blokuje provádění, dokud čítač nedosáhne nuly.

Příklad:

var wg sync.WaitGroup

wg.Add(1)
go func() {
    defer wg.Done()
    // práce gorutiny
}()

wg.Wait() // počkat na dokončení všech gorutin

Tímto způsobem program garantovaně počká na dokončení všech gorutin před pokračováním nebo ukončením.