Go Academy · Les

Method promotion

Erf methoden via embedding

Les 3 van 413 stappen

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
Gratis beginnen

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

  1. Structembedding
  2. Interface-embedding
  3. Method promotion
  4. Compositie boven overerving
← Terug naar Go Academy