Go · Avançado · Inglês · Técnico
typed nil
Interface que guarda um ponteiro nil de tipo concreto: a interface não é nil, porque tem tipo, apesar de o valor ser nil.
Onde usar
Bug clássico: uma função retorna um *MyErr nil como error, e 'if err != nil' dá verdadeiro. A correção é retornar o nil literal.
Em código
type MyErr struct{}
func (*MyErr) Error() string { return "x" }
func f() error {
var e *MyErr
return e // não é nil!
}
fmt.Println(f() == nil) // falseExemplos
That's the typed nil trap: the error isn't nil.
Essa é a armadilha do typed nil: o erro não é nil.
Return a plain nil, not a nil pointer of your error type.
Retorne um nil simples, não um ponteiro nil do seu tipo de erro.
Cuidado
Uma interface só é nil quando tipo e valor são ambos nil; basta o tipo estar preenchido para a comparação com nil falhar.
Sinônimos
nil tipado, interface com ponteiro nil