Methoden-Promotion
Methoden durch Einbettung übernehmen
Methoden-Promotion ist eine kostenlose Go Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Go Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.
Methoden durch Einbettung erben
Wenn Sie einen Typ einbetten, werden auch seine Methoden promotiert. Der äußere Typ kann sie aufrufen, als hätte er sie selbst definiert – Gos Variante der Vererbung.
Eine promotierte Methode
Car bettet Engine ein und erhält dessen Start-Methode ohne zusätzlichen Aufwand.
package main
import "fmt"
type Engine struct{}
func (Engine) Start() { fmt.Println("engine started") }
type Car struct{ Engine }
func main() {
c := Car{}
c.Start()
}Methoden arbeiten mit dem eingebetteten Wert
Eine promotierte Methode wird für das eingebettete Feld ausgeführt, nicht für das äußere Struct. Sie kann die anderen Felder des äußeren Structs nicht sehen.
package main
import "fmt"
type Counter struct{ n int }
func (c *Counter) Inc() { c.n++ }
func (c Counter) Get() int { return c.n }
type Widget struct{ Counter }
func main() {
w := Widget{}
w.Inc()
w.Inc()
fmt.Println(w.Get())
}Eine Methode überschreiben
Definieren Sie im äußeren Struct eine Methode mit demselben Namen, um die promotierte Methode zu überschreiben. Die äußere Methode hat Vorrang.
package main
import "fmt"
type Animal struct{}
func (Animal) Speak() string { return "..." }
type Dog struct{ Animal }
func (Dog) Speak() string { return "Woof" }
func main() {
fmt.Println(Dog{}.Speak())
}Die eingebettete Variante aufrufen
Auch nach dem Überschreiben können Sie über den Namen des eingebetteten Typs weiterhin auf die ursprüngliche Methode zugreifen.
package main
import "fmt"
type Animal struct{}
func (Animal) Speak() string { return "generic" }
type Dog struct{ Animal }
func (d Dog) Speak() string { return "Woof + " + d.Animal.Speak() }
func main() {
fmt.Println(Dog{}.Speak())
}Promotion und Interfaces
Da promotierte Methoden zum Methodensatz des äußeren Typs gehören, kann der äußere Typ mithilfe der Methoden des eingebetteten Typs Interfaces erfüllen.
package main
import "fmt"
type Stringer interface{ String() string }
type Base struct{ name string }
func (b Base) String() string { return b.name }
type Wrapper struct{ Base }
func main() {
var s Stringer = Wrapper{Base{"hi"}}
fmt.Println(s.String())
}Methodensätze bei Pointern und Werten
Wenn der eingebettete Typ Methoden mit Pointer-Receiver besitzt, werden diese Methoden nur für einen Pointer auf das äußere Struct (oder einen adressierbaren Wert) in dessen Methodensatz promotiert.
Einbettung für Standardverhalten
Batten Sie einen Typ ein, der sinnvolle Standardmethoden bereitstellt, und überschreiben Sie anschließend nur die wenigen Methoden, die Sie anpassen müssen – ein leistungsfähiges Muster zur Wiederverwendung.
package main
import "fmt"
type DefaultHandler struct{}
func (DefaultHandler) Handle() string { return "default" }
type CustomHandler struct{ DefaultHandler }
func (CustomHandler) Handle() string { return "custom" }
func main() {
fmt.Println(CustomHandler{}.Handle())
}Keine echte Polymorphie
Anders als bei klassischer OOP wird die eingebettete Methode nicht an die überschreibende Methode des äußeren Typs weitergeleitet. Go kennt keine virtuelle Methodenauflösung durch Einbettung.
Promotion über mehrere Ebenen
Methoden werden transitiv promotiert: Wenn A B einbettet und B C einbettet, erhält A auch die Methoden von C, sofern keine Mehrdeutigkeit besteht.
Wann Promotion hilfreich ist
- Verhalten wiederverwenden, ohne es neu zu schreiben
- Standardverhalten bereitstellen, das Sie überschreiben können
- Interfaces über eingebettete Methoden erfüllen
Kurztest
Testen Sie Ihr Wissen über Methodenpromotion.
Zusammenfassung
Sie haben Methodenpromotion kennengelernt.
- Eingebettete Methoden werden in den äußeren Typ promotiert
- Äußere Methoden überschreiben promotierte Methoden
- Über den Namen des eingebetteten Typs erreichen Sie die ursprüngliche Methode
- Promotion hilft beim Erfüllen von Interfaces, es gibt jedoch keine virtuelle Methodenauflösung
Häufig gestellte Fragen
Ist die Lektion „Methoden-Promotion“ kostenlos?
Ja — der vollständige Text von „Methoden-Promotion“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Go Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Methoden-Promotion“?
Methoden durch Einbettung übernehmen Du übst Go Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Go Academy zu starten?
Keine Vorkenntnisse erforderlich. Go Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Methoden-Promotion“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Go Academy-Lektion Code schreiben und ausführen?
Ja. Jede Go Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Struct-Einbettung
- Interface-Einbettung
- Methoden-Promotion
- Komposition statt Vererbung