Sobes.tech
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.Once contém uma bandeira interna que rastreia se a função já foi executada.
  • O método Do(f func()) aceita uma função f e garante que ela seja chamada apenas uma vez.
  • Se várias goroutines chamarem Do ao 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.