Middle
Como é que se podem usar as estruturas incorporadas em Go para imitar herança? O que isso traz de benefício e para que é utilizado?
sobes.tech IA
Resposta da IA
No Go não há herança clássica como em linguagens orientadas a objetos, mas estruturas embutidas (embedding) permitem imitá-la.
Quando uma estrutura inclui outra como um campo sem nome, os métodos da estrutura embutida tornam-se acessíveis para a estrutura externa, o que se assemelha à herança.
Isto fornece:
- Reutilização de código
- Composição em vez de herança
- Capacidade de expandir o comportamento da estrutura embutida
Exemplo:
type Animal struct {
Name string
}
func (a Animal) Speak() string {
return "..."
}
// Embutindo Animal em Dog
type Dog struct {
Animal
}
func (d Dog) Speak() string {
return "Woof!"
}
func main() {
d := Dog{Animal{Name: "Buddy"}}
fmt.Println(d.Name) // acesso ao campo Animal
fmt.Println(d.Speak()) // chamada do método sobrescrito
}
Usado para criar tipos mais complexos com base em tipos simples, sem uma hierarquia rígida de classes.