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.