Avatar ·

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