Sobes.tech
Junior — Middle

Můžete vysvětlit princip dědičnosti a jak je implementován v jazyce Go?

sobes.tech AI

Odpověď od AI

V jazyce Go neexistuje klasické dědičnosti jako v jiných objektově orientovaných jazycích. Místo toho Go používá kompozici a embedding (vložení) pro opakované použití kódu a rozšíření funkčnosti.

Embedding umožňuje začlenit jeden typ (strukturu) do jiného a metody vloženého typu jsou dostupné pro vnější typ, což připomíná dědičnost.

Příklad:

type Animal struct {
    Name string
}

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

// Vložíme Animal do Dog

type Dog struct {
    Animal
}

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

func main() {
    dog := Dog{Animal{Name: "Buddy"}}
    fmt.Println(dog.Name)       // Přístup k poli Animal
    fmt.Println(dog.Speak())    // Přepsaná metoda
}

Tímto způsobem Go dosahuje efektu podobného dědičnosti pomocí kompozice a embeddingu, čímž se vyhýbá složitostem klasické hierarchie.