Method promotion
Erf methoden via embedding
Method promotion is een gratis Go Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Go Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Go Academy bevat in totaal 4 lessen.
Methoden overnemen via inbedding
Wanneer je een type inbedt, worden ook de methoden ervan beschikbaar gemaakt. Het buitenste type kan ze aanroepen alsof het ze zelf had gedefinieerd — Go's variant van overerving.
Een gepromoveerde methode
Car bedt Engine in en krijgt diens methode Start zonder extra werk.
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 werken op de ingebedde waarde
Een gepromoveerde methode wordt uitgevoerd op het ingebedde veld, niet op de buitenste struct. De methode kan de andere velden van de buitenste struct niet zien.
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())
}Een methode overschrijven
Definieer een methode met dezelfde naam op de buitenste struct om de gepromoveerde methode te overschrijven. De buitenste methode heeft voorrang.
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())
}De ingebedde versie aanroepen
Ook na het overschrijven kun je de oorspronkelijke methode nog bereiken via de naam van het ingebedde type.
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())
}Promotie en interfaces
Omdat gepromoveerde methoden deel uitmaken van de methodeset van het buitenste type, kan het buitenste type met de methoden van het ingebedde type aan interfaces voldoen.
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())
}Methodesets van pointers en waarden
Als het ingebedde type methoden met pointer-receivers heeft, worden die methoden alleen opgenomen in de methodeset van een pointer naar de buitenste struct (of van een adresseerbare waarde).
Inbedding voor standaardgedrag
Bed een type in dat zinvolle standaardmethoden biedt en overschrijf daarna alleen de enkele methoden die je wilt aanpassen — een krachtig patroon voor hergebruik.
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())
}Geen echte polymorfie
In tegenstelling tot klassieke OOP wordt vanuit de ingebedde methode niet terugverwezen naar de overschreven methode van het buitenste type. Go heeft geen virtuele methode-dispatch via inbedding.
Promotie over meerdere niveaus
Methoden worden transitief gepromoveerd: als A B inbedt en B C inbedt, krijgt A ook de methoden van C, zolang er geen dubbelzinnigheid is.
Wanneer promotie helpt
- Gedrag hergebruiken zonder het opnieuw te schrijven
- Standaardgedrag bieden dat je kunt overschrijven
- Aan interfaces voldoen via ingebedde methoden
Korte controle
Test je kennis van methodepromotie.
Samenvatting
Je hebt methodepromotie geleerd.
- Ingebedde methoden worden beschikbaar in het buitenste type
- Buitenste methoden overschrijven gepromoveerde methoden
- Bereik de oorspronkelijke methode via de naam van het ingebedde type
- Promotie helpt om aan interfaces te voldoen, maar er is geen virtuele methode-dispatch
Leer Go met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 51
- Lessen
- 203
Veelgestelde vragen
Is de les “Method promotion” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad Go Academy, waaronder “Method promotion”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Go Academy bevat in totaal 4 lessen.
Wat leer ik in “Method promotion”?
Erf methoden via embedding Je oefent met Go Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Go Academy te beginnen?
Ervaring vooraf is niet nodig. Go Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.
Hoe lang duurt de les “Method promotion”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Go Academy?
Ja. Elke les over Go Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Structembedding
- Interface-embedding
- Method promotion
- Compositie boven overerving