Sobes.tech
Junior — Middle

Qual è il ruolo principale del tipo sync.Once nella sincronizzazione dei thread in Go?

sobes.tech AI

Risposta dell'AI

Il tipo sync.Once in Go viene utilizzato per garantire che un determinato frammento di codice venga eseguito esattamente una volta, anche se viene chiamato da più goroutine.

Il ruolo principale è l'inizializzazione sicura delle risorse (ad esempio, la creazione di un singleton), per evitare condizioni di gara e esecuzioni ripetute.

Esempio di utilizzo:

var once sync.Once
var config *Config

func loadConfig() {
    config = &Config{/* inizializzazione */}
}

func GetConfig() *Config {
    once.Do(loadConfig) // loadConfig verrà chiamato solo una volta
    return config
}

In questo modo, sync.Once garantisce l'esecuzione thread-safe di una funzione una sola volta.