Sobes.tech
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.Once contiene un flag interno che tiene traccia se la funzione è già stata eseguita.
  • Il metodo Do(f func()) accetta una funzione f e garantisce che venga chiamata solo una volta.
  • Se più goroutine chiamano Do contemporaneamente, 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.