Ir al contenido

Wait Group Misuse (ARCH5037)

Esta página aún no está disponible en tu idioma.

Key go.async.waitgroup-misuse · Severity warning · Category async

Misusing sync.WaitGroup - calling wg.Add inside the goroutine instead of before launch, or omitting defer wg.Done() - causes races against Wait or hangs forever when a goroutine panics.

func RunAll(tasks []func()) {
var wg sync.WaitGroup
for _, t := range tasks {
go func(fn func()) {
wg.Add(1) // after launch; may miss Wait
fn()
}(t)
}
wg.Wait()
}
func RunAll(tasks []func()) {
var wg sync.WaitGroup
for _, t := range tasks {
wg.Add(1)
go func(fn func()) {
defer wg.Done()
fn()
}(t)
}
wg.Wait()
}

Call wg.Add(1) before launching the goroutine and use defer wg.Done() at its top.