Go · Avançado · Inglês · Técnico
sync.Once
Tipo do pacote sync cujo método Do executa uma função exatamente uma vez, mesmo com chamadas concorrentes. As demais chamadas esperam a primeira terminar.
Onde usar
Ideal para inicialização preguiçosa e segura entre goroutines, como abrir uma conexão compartilhada ou carregar configuração na primeira necessidade.
Em código
var once sync.Once
var cfg *Config
func Get() *Config {
once.Do(func() { cfg = load() })
return cfg
}Exemplos
We load the config once with sync.Once.
Carregamos a configuração uma vez com sync.Once.
Other goroutines wait until the first call to Do returns.
As outras goroutines esperam até a primeira chamada a Do retornar.
Cuidado
Se a função passada a Do der panic, a Once considera a execução concluída e não tenta de novo.
Sinônimos
inicialização única