Junior — Middle
Explique a finalidade e o princípio de funcionamento da estrutura sync.Once em Go.
sobes.tech IA
Resposta da IA
sync.Once em Go é usado para garantir que uma operação específica (por exemplo, inicialização) seja executada exatamente uma vez, mesmo que várias goroutines a chamem simultaneamente. Isso é útil para inicialização preguiçosa ou configuração de recursos.
Princípio de funcionamento:
sync.Oncecontém uma bandeira interna que rastreia se a função já foi executada.- O método
Do(f func())aceita uma funçãofe garante que ela seja chamada apenas uma vez. - Se várias goroutines chamarem
Doao mesmo tempo, apenas uma delas executará a função, as outras esperarão até que ela termine.
Exemplo:
var once sync.Once
func initialize() {
fmt.Println("Inicialização concluída")
}
func main() {
for i := 0; i < 5; i++ {
go func() {
once.Do(initialize)
}()
}
time.Sleep(time.Second) // Esperar pelas goroutines
}
Neste exemplo, a mensagem "Inicialização concluída" será exibida exatamente uma vez.