Avatar ·

Cómo verificar correctamente nil en Go: interfaces, estructuras y punteros

¡Hola, colegas! Soy un desarrollador Go principiante y me encontré con un problema muy extraño al verificar nil. Tengo una función que devuelve una interfaz error, y estoy tratando de verificar si ocurrió un error. Pero mi código se comporta de manera inesperada. Aquí hay un ejemplo 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 // ... alguna lógica, pero err sigue siendo nil return err } func main() { err := doSomething() if err != nil { fmt.Println("Hay error:", err) } else { fmt.Println("No hay error") } } ``` Espero que el programa imprima "No hay error", porque estoy devolviendo nil. Pero imprime "Hay error: ". ¿Por qué sucede esto? ¿Cómo verificar correctamente nil en Go? He oído que está relacionado con cómo funcionan las interfaces, pero no entiendo los detalles. Agradecería una explicación.