Junior — Middle
Spiega lo scopo e il principio di funzionamento della struttura sync.Once in Go.
sobes.tech AI
Risposta dell'AI
sync.Once in Go viene utilizzato per garantire che un'operazione specifica (ad esempio, l'inizializzazione) venga eseguita una sola volta, anche se più goroutine la chiamano contemporaneamente. È utile per l'inizializzazione pigra o la configurazione delle risorse.
Principio di funzionamento:
sync.Oncecontiene un flag interno che tiene traccia se la funzione è già stata eseguita.- Il metodo
Do(f func())accetta una funzionefe garantisce che venga chiamata solo una volta. - Se più goroutine chiamano
Docontemporaneamente, solo una eseguirà la funzione, le altre aspetteranno che finisca.
Esempio:
var once sync.Once
func initialize() {
fmt.Println("Inizializzazione completata")
}
func main() {
for i := 0; i < 5; i++ {
go func() {
once.Do(initialize)
}()
}
time.Sleep(time.Second) // Attendere il completamento delle goroutine
}
In questo esempio, il messaggio "Inizializzazione completata" verrà visualizzato esattamente una volta.