panic y recover en Go
Panic es para lo imposible; recover lo vuelve un error en una frontera.
func safeDivide(a, b int) (result int, err error) {
defer func() {
if recovered := recover(); recovered != nil {
err = fmt.Errorf("recovered: %v", recovered)
}
}()
return a / b, nil // b == 0 panics
}
func outcomes() []string {
var out []string
for _, pair := range [][2]int{{6, 3}, {1, 0}} {
value, err := safeDivide(pair[0], pair[1])
out = append(out, fmt.Sprintf("%d %v", value, err))
}
return out
}
Cómo funciona
recoversolo funciona dentro de una función diferida.- Nombrar el resultado deja que la func diferida lo asigne.
- Recuperar en la frontera de un paquete es el único uso cortés.
Palabras clave y builtins usados aquí
appenddefererrorforfuncifintrangerecoverreturnstringvar
El intento, en números
- Líneas
- 17
- Caracteres a escribir
- 403
- Tokens
- 130
- Ritmo de tres estrellas
- 105 tpm
Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 74 segundos.
Paso 3 de 4 en defer, panic y recover; paso 12 de 15 en Errores.