typestar

errors.Is en Go

Comparar contra un centinela a través de cualquier cantidad de envolturas.

var (
    ErrLocked  = errors.New("step locked")
    ErrMissing = errors.New("step missing")
)

func play(idx int) error {
    if idx > 10 {
        return fmt.Errorf("play %d: %w", idx, ErrMissing)
    }
    if idx > 3 {
        return fmt.Errorf("play %d: %w", idx, ErrLocked)
    }
    return nil
}

func describe(idx int) string {
    err := play(idx)
    switch {
    case err == nil:
        return "playing"
    case errors.Is(err, ErrLocked):
        return "earn a star first"
    case errors.Is(err, ErrMissing):
        return "no such step"
    }
    return "unknown failure"
}

Cómo funciona

  1. == falla en cuanto el error queda envuelto; errors.Is no.
  2. Los centinelas son vars exportadas, para que quien llama pueda nombrarlos.
  3. errors.Is también respeta un método Is que definas.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
27
Caracteres a escribir
493
Tokens
115
Ritmo de tres estrellas
100 tpm

Al ritmo de tres estrellas de 100 tokens por minuto, este intento toma unos 69 segundos.

Escribe este fragmento

Paso 2 de 4 en Envolver errores; paso 5 de 15 en Errores.

← Anterior Siguiente →