Sobes.tech
Junior — Middle

Czy możesz wyjaśnić zasadę dziedziczenia i jak jest ona realizowana w języku Go?

sobes.tech AI

Odpowiedź od AI

W języku Go nie ma klasycznego dziedziczenia, jak w innych językach obiektowych. Zamiast tego, Go używa kompozycji i wbudowania (embedding) do ponownego użycia kodu i rozszerzania funkcjonalności.

Wbudowanie pozwala na włączenie jednego typu (struktury) do innego, a metody wbudowanego typu stają się dostępne dla typu zewnętrznego, co przypomina dziedziczenie.

Przykład:

type Animal struct {
    Name string
}

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

// Wbudowujemy Animal w Dog

type Dog struct {
    Animal
}

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

func main() {
    dog := Dog{Animal{Name: "Buddy"}}
    fmt.Println(dog.Name)       // Dostęp do pola Animal
    fmt.Println(dog.Speak())    // Nadpisana metoda
}

W ten sposób, Go osiąga efekt podobny do dziedziczenia poprzez kompozycję i wbudowanie, unikając złożoności klasycznej hierarchii.