Sobes.tech
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.