Sobes.tech
Назад к вопросам
Junior — Middle
71

Можете объяснить принцип наследования и как он реализован в языке Go?

Компании, где спрашивали
СБЕР дейвайсыСБЕР дейвайсы

Ответ от нейросети

sobes.tech AI

В языке Go нет классического наследования, как в других объектно-ориентированных языках. Вместо этого Go использует композицию и встраивание (embedding) для повторного использования кода и расширения функциональности.

Встраивание позволяет включать один тип (структуру) внутрь другого, и при этом методы встроенного типа становятся доступными для внешнего типа, что похоже на наследование.

Пример:

type Animal struct {
    Name string
}

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

// Встраиваем Animal в Dog

type Dog struct {
    Animal
}

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

func main() {
    dog := Dog{Animal{Name: "Buddy"}}
    fmt.Println(dog.Name)       // Доступ к полю Animal
    fmt.Println(dog.Speak())    // Переопределённый метод
}

Таким образом, Go достигает похожего эффекта на наследование через композицию и встраивание, избегая сложностей классической иерархии.