Sobes.tech
Middle

Jak można używać wbudowanych struktur w Go do naśladowania dziedziczenia? Co to daje i do czego służy?

sobes.tech AI

Odpowiedź od AI

W Go nie ma klasycznego dziedziczenia jak w językach obiektowych, ale wbudowane struktury (embedding) pozwalają je naśladować.

Gdy jedna struktura zawiera inną jako pole bez nazwy, metody wbudowanej struktury stają się dostępne dla struktury zewnętrznej, co przypomina dziedziczenie.

Daje to:

  • Ponowne użycie kodu
  • Kompozycję zamiast dziedziczenia
  • Możliwość rozszerzania zachowania wbudowanej struktury

Przykład:

type Animal struct {
    Name string
}

func (a Animal) Speak() string {
    return "..."
}

// Embedding Animal w Dog
type Dog struct {
    Animal
}

func (d Dog) Speak() string {
    return "Woof!"
}

func main() {
    d := Dog{Animal{Name: "Buddy"}}
    fmt.Println(d.Name)      // dostęp do pola Animal
    fmt.Println(d.Speak())   // wywołanie nadpisanej metody
}

Używa się do tworzenia bardziej złożonych typów na podstawie prostych, bez sztywnej hierarchii klas.