Interfaces implícitas e o `nil` interface trap
Pergunta
Como interfaces são satisfeitas em Go, e por que uma interface pode não ser `nil` mesmo carregando um ponteiro `nil`?
Resposta esperada
Em Go, um tipo satisfaz uma interface só por ter os métodos — não há `implements` explícito. Isso permite definir a interface do lado de quem CONSOME (aceitar `interface { Read(...) }` sem o autor do tipo saber). A pegadinha do `nil`: uma interface value guarda DOIS componentes — o tipo dinâmico e o valor. Ela só é `== nil` se AMBOS forem nil. Se você tem `var p *MeuErro = nil` e retorna `p` como `error`, a interface passa a carregar o TIPO `*MeuErro` com valor `nil` — e `err != nil` é `true`, mesmo o ponteiro sendo nil. O `if err != nil` do chamador dispara com um 'erro' que na prática é nulo. Por isso a regra: declare o retorno como o tipo concreto e retorne `nil` literal no caminho de sucesso, ou não guarde ponteiro nil tipado numa interface de erro.
Por que perguntam isso
Pergunta sênior de Go. O 'typed nil in interface' é um clássico que pega gente experiente. Sinal forte: 'interface guarda tipo E valor'.