Avatar ·

Erreur « pointeur vers interface, pas interface » : comment passer correctement des interfaces en Go ?

Bonjour à tous ! Je suis débutant en Go et j'ai rencontré une erreur de compilation que je ne comprends pas : « *MyInterface is pointer to interface, not interface ». J'ai une interface et une structure qui l'implémente : ```go type Animal interface { Speak() string } type Dog struct{} func (d *Dog) Speak() string { return "Woof!" } ``` Je veux passer un pointeur vers la structure à une fonction qui accepte une interface : ```go func MakeSound(a Animal) { fmt.Println(a.Speak()) } func main() { dog := &Dog{} MakeSound(dog) // fonctionne } ``` Mais si j'essaie de passer un **pointeur vers une interface** (pour une raison quelconque), j'obtiens une erreur : ```go func main() { var animalInterface Animal animalInterface = &Dog{} MakeSound(&animalInterface) // erreur : cannot use &animalInterface (variable of type *Animal) as type Animal in argument to MakeSound } ``` Pourquoi cela se produit-il ? Quelle est la différence entre passer `*Dog` (qui implémente l'interface) et `*Animal` (pointeur vers l'interface) ?