Junior — Middle
Explica la finalidad y el principio de funcionamiento de la estructura sync.Once en Go.
sobes.tech AI
Respuesta de la IA
sync.Once en Go se utiliza para garantizar que una operación específica (por ejemplo, la inicialización) se realice exactamente una vez, incluso si varias goroutines la llaman simultáneamente. Esto es útil para inicialización perezosa o configuración de recursos.
Principio de funcionamiento:
sync.Oncecontiene una bandera interna que rastrea si la función ya ha sido ejecutada.- El método
Do(f func())acepta una funciónfy garantiza que solo se llame una vez. - Si varias goroutines llaman a
Doal mismo tiempo, solo una de ellas ejecutará la función, las demás esperarán a que termine.
Ejemplo:
var once sync.Once
func initialize() {
fmt.Println("Inicialización completada")
}
func main() {
for i := 0; i < 5; i++ {
go func() {
once.Do(initialize)
}()
}
time.Sleep(time.Second) // Esperar a que terminen las goroutines
}
En este ejemplo, el mensaje "Inicialización completada" se mostrará exactamente una vez.