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) ?
No answers yet.
Connectez-vous pour laisser une réponse