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)?
Noch keine Antworten.
Anmelden um eine Antwort zu hinterlassen
Blogs
Asynchrone Programmierung in PHP: Vollständiger Leitfaden
Arbeiten mit JSON in JavaScript: Parsen und Serialisieren von Daten
CI/CD für Kotlin-Projekte: GitHub Actions von A bis Z
Aufgabenwarteschlangen in Rust: Vollständiger Leitfaden für Anfänger