Intern
O que acontece se o contador do sync.WaitGroup ficar negativo devido a chamadas extras de Done em comparação com Add?
sobes.tech IA
Resposta da IA
Se o contador do sync.WaitGroup em Go ficar negativo devido a chamadas Done() que são mais do que Add(), ocorrerá um pânico (panic) em tempo de execução.
O WaitGroup rastreia o número de goroutines esperadas através de um contador. Ao chamar Add(n), o contador aumenta em n, e ao chamar Done() — diminui em 1. Se o contador ficar menor que zero, isso é considerado um erro de uso.
Exemplo de erro:
var wg sync.WaitGroup
wg.Add(1)
wg.Done()
wg.Done() // chamada extra, causará panic
O pânico ocorre com a mensagem:
panic: sync: negative WaitGroup counter
Portanto, é importante manter um equilíbrio rigoroso entre Add e Done para evitar esse erro.