Como verificar nil em Go corretamente: interfaces, structs e ponteiros
Olá, colegas! Sou um desenvolvedor Go iniciante e me deparei com um problema muito estranho ao verificar nil. Tenho uma função que retorna uma interface error, e estou tentando verificar se ocorreu um erro. Mas meu código se comporta de forma inesperada.
Aqui está um exemplo simplificado:
```go
type MyError struct {
Code int
Msg string
}
func (e *MyError) Error() string {
return fmt.Sprintf("error %d: %s", e.Code, e.Msg)
}
func doSomething() error {
var err *MyError = nil
// ... alguma lógica, mas err permanece nil
return err
}
func main() {
err := doSomething()
if err != nil {
fmt.Println("Tem erro:", err)
} else {
fmt.Println("Sem erro")
}
}
```
Eu espero que o programa imprima "Sem erro", porque estou retornando nil