Promozione dei metodi
Ereditare metodi tramite embedding
Promozione dei metodi è una lezione Go Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Go Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Go Academy include 4 lezioni in totale.
Ereditare metodi tramite embedding
Quando incorpora un tipo, ne vengono promossi anche i metodi. Il tipo esterno può chiamarli come se li avesse definiti: è la variante di Go dell'ereditarietà.
Un metodo promosso
Car incorpora Engine e acquisisce gratuitamente il metodo Start.
package main
import "fmt"
type Engine struct{}
func (Engine) Start() { fmt.Println("engine started") }
type Car struct{ Engine }
func main() {
c := Car{}
c.Start()
}I metodi operano sul valore incorporato
Un metodo promosso opera sul campo incorporato, non sulla struct esterna. Non può accedere agli altri campi della struct esterna.
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())
}Sovrascrivere un metodo
Definisca un metodo con lo stesso nome sulla struct esterna per sovrascrivere quello promosso. Il metodo esterno ha la precedenza.
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())
}Chiamare la versione incorporata
Anche dopo la sovrascrittura, può comunque raggiungere il metodo originale tramite il nome del tipo incorporato.
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())
}Promozione e interfacce
Poiché i metodi promossi fanno parte dell'insieme dei metodi del tipo esterno, il tipo esterno può soddisfare le interfacce usando i metodi del tipo incorporato.
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())
}Insiemi di metodi per puntatore e per valore
Se il tipo incorporato ha metodi con receiver puntatore, solo un puntatore alla struct esterna (o un valore indirizzabile) ottiene quei metodi promossi nel proprio insieme di metodi.
Embedding per il comportamento predefinito
Incorpori un tipo che fornisce metodi predefiniti sensati, poi sovrascriva solo i pochi necessari per personalizzarlo: un potente modello di riutilizzo.
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())
}Nessun vero polimorfismo
A differenza dell'OOP classico, il metodo incorporato non esegue il dispatch nuovamente verso l'override esterno. Go non dispone di un dispatch di metodi virtuali tramite embedding.
Promozione attraverso più livelli
I metodi vengono promossi transitivamente: se A incorpora B e B incorpora C, A acquisisce anche i metodi di C, purché non vi siano ambiguità.
Quando la promozione è utile
- Riutilizzare il comportamento senza riscriverlo
- Fornire valori predefiniti che è possibile sovrascrivere
- Soddisfare le interfacce tramite metodi incorporati
Verifica rapida
Verifichi la Sua conoscenza della promozione dei metodi.
Riepilogo
Ha appreso la promozione dei metodi.
- I metodi incorporati vengono promossi nel tipo esterno
- I metodi esterni sovrascrivono quelli promossi
- È possibile raggiungere l'originale tramite il nome del tipo incorporato
- La promozione aiuta a soddisfare le interfacce, ma non esiste un dispatch virtuale
Domande Frequenti
La lezione «Promozione dei metodi» è gratuita?
Sì — il testo completo di «Promozione dei metodi» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Go Academy, passa a CoddyKit PRO. Il corso Go Academy include 4 lezioni in totale.
Cosa imparerò in «Promozione dei metodi»?
Ereditare metodi tramite embedding Eserciti Go Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Go Academy?
Non è richiesta alcuna esperienza precedente. Go Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Promozione dei metodi»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Go Academy?
Sì. Ogni lezione Go Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Embedding degli struct
- Embedding delle interfacce
- Promozione dei metodi
- Composizione anziché ereditarietà