How to properly check for nil in Go: interfaces, structs, and pointers
Hello colleagues! I'm a beginner Go developer and I've encountered a very strange problem when checking for nil. I have a function that returns an error interface, and I'm trying to check if an error occurred. But my code behaves unexpectedly.
Here's a simplified example:
```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
// ... some logic, but err remains nil
return err
}
func main() {
err := doSomething()
if err != nil {
fmt.Println("There is an error:", err)
} else {
fmt.Println("No error")
}
}
```
I expect the program to print "No error" because I'm returning nil