Comment vérifier correctement nil en Go : interfaces, structures et pointeurs
Bonjour, collègues ! Je suis un développeur Go débutant et j'ai rencontré un problème très étrange lors de la vérification de nil. J'ai une fonction qui retourne une interface error, et j'essaie de vérifier si une erreur s'est produite. Mais mon code se comporte de manière inattendue.
Voici un exemple simplifié :
```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
// ... une certaine logique, mais err reste nil
return err
}
func main() {
err := doSomething()
if err != nil {
fmt.Println("Il y a une erreur :", err)
} else {
fmt.Println("Pas d'erreur")
}
}
```
Je m'attends à ce que le programme affiche "Pas d'erreur", car je retourne nil. Mais il affiche "Il y a une erreur : ". Pourquoi cela se produit-il ? Comment vérifier correctement nil en Go ? J'ai entendu dire que cela est lié à la façon dont les interfaces fonctionnent, mais je ne comprends pas les détails. Je vous serais reconnaissant pour votre aide.