Sobes.tech
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.Once contiene una bandera interna que rastrea si la función ya ha sido ejecutada.
  • El método Do(f func()) acepta una función f y garantiza que solo se llame una vez.
  • Si varias goroutines llaman a Do al 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.