Middle
Come si possono usare le strutture incorporate in Go per imitare l'ereditarietà? Cosa offre e a cosa serve?
sobes.tech AI
Risposta dell'AI
In Go non esiste un’ereditarietà classica come nei linguaggi orientati agli oggetti, ma le strutture incorporate (embedding) permettono di imitarla.
Quando una struttura include un’altra come campo senza nome, i metodi della struttura incorporata diventano accessibili per la struttura esterna, somigliando a un’eredità.
Questo offre:
- Riutilizzo del codice
- Composizione invece di ereditarietà
- La possibilità di espandere il comportamento della struttura incorporata
Esempio:
type Animal struct {
Name string
}
func (a Animal) Speak() string {
return "..."
}
// Incorporiamo Animal in Dog
type Dog struct {
Animal
}
func (d Dog) Speak() string {
return "Woof!"
}
func main() {
d := Dog{Animal{Name: "Buddy"}}
fmt.Println(d.Name) // accesso al campo Animal
fmt.Println(d.Speak()) // chiamata al metodo sovrascritto
}
Viene usato per creare tipi più complessi basati su tipi semplici, senza una gerarchia rigida di classi.