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
Docorre la función la primera vez y nunca más.- Quien llame después bloquea hasta que esa primera corrida termina.
OnceValuees la forma más nueva, que devuelve el resultado.
Palabras clave y builtins usados aquí
funcintmapreturnstringvar
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.
Paso 3 de 5 en Sincronización; paso 16 de 25 en Concurrencia.