typestar

La trampa de la interfaz nil en Go

Una interfaz que contiene un puntero nil no es nil en sí misma.

type MyError struct{}

func (e *MyError) Error() string { return "my error" }

// broken devuelve una interfaz no nil que contiene un puntero nil.
func broken(fail bool) error {
    var custom *MyError
    if fail {
        custom = &MyError{}
    }
    return custom
}

func fixed(fail bool) error {
    if fail {
        return &MyError{}
    }
    return nil
}

func compare() (bool, bool) {
    return broken(false) != nil, fixed(false) != nil
}

Cómo funciona

  1. La interfaz tiene un tipo y un valor; solo ambos en nil es nil.
  2. Devolver un error nil tipado vuelve err != nil inesperadamente verdadero.
  3. Devuelve un nil pelado, o revisa antes de envolver.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
23
Caracteres a escribir
401
Tokens
90
Ritmo de tres estrellas
100 tpm

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

Escribe este fragmento

Paso 4 de 4 en Interfaces; paso 7 de 19 en Interfaces y genéricos.

← Anterior Siguiente →