Avatar ·

Fehler „Zeiger auf Schnittstelle, nicht Schnittstelle“: Wie übergibt man Interfaces in Go korrekt?

Hallo zusammen! Ich bin neu in Go und bin auf einen unverständlichen Kompilierungsfehler gestoßen: „*MyInterface is pointer to interface, not interface“.\n\nIch habe ein Interface und eine Struktur, die es implementiert:\n\n```go\ntype Animal interface {\n Speak() string\n}\n\ntype Dog struct{}\n\nfunc (d *Dog) Speak() string {\n return \"Woof!\"\n}\n```\n\nIch möchte einen Zeiger auf die Struktur an eine Funktion übergeben, die ein Interface akzeptiert:\n\n```go\nfunc MakeSound(a Animal) {\n fmt.Println(a.Speak())\n}\n\nfunc main() {\n dog := &Dog{}\n MakeSound(dog) // funktioniert\n}\n```\n\nAber wenn ich versuche, einen **Zeiger auf das Interface** (aus irgendeinem Grund) zu übergeben, erhalte ich einen Fehler:\n\n```go\nfunc main() {\n var animalInterface Animal\n animalInterface = &Dog{}\n MakeSound(&animalInterface) // Fehler: cannot use &animalInterface (variable of type *Animal) as type Animal in argument to MakeSound\n}\n```\n\nWarum passiert das? Was ist der Unterschied zwischen der Übergabe von `*Dog` (der das Interface implementiert) und `*Animal` (einem Zeiger auf das Interface)?