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
- La interfaz tiene un tipo y un valor; solo ambos en nil es nil.
- Devolver un error nil tipado vuelve err != nil inesperadamente verdadero.
- Devuelve un nil pelado, o revisa antes de envolver.
Palabras clave y builtins usados aquí
boolerrorfuncifreturnstringstructtypevar
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.
Paso 4 de 4 en Interfaces; paso 7 de 19 en Interfaces y genéricos.