typestar

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

  1. recover solo funciona dentro de una función diferida.
  2. Nombrar el resultado deja que la func diferida lo asigne.
  3. Recuperar en la frontera de un paquete es el único uso cortés.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 3 de 4 en defer, panic y recover; paso 12 de 15 en Errores.

← Anterior Siguiente →