typestar

sync.Once en Go

Inicialización exactamente una vez, segura desde cualquier número de goroutines.

var (
    setupOnce sync.Once
    table     map[string]int
)

func lookup(key string) int {
    setupOnce.Do(func() {
        table = map[string]int{"basics": 39, "traits": 19}
    })
    return table[key]
}

var expensive = sync.OnceValue(func() int {
    return 40 + 2
})

func answer() int { return expensive() }

Cómo funciona

  1. Do corre la función la primera vez y nunca más.
  2. Quien llame después bloquea hasta que esa primera corrida termina.
  3. OnceValue es la forma más nueva, que devuelve el resultado.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
17
Caracteres a escribir
283
Tokens
82
Ritmo de tres estrellas
105 tpm

Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 47 segundos.

Escribe este fragmento

Paso 3 de 5 en Sincronización; paso 16 de 25 en Concurrencia.

← Anterior Siguiente →