Sobes.tech
Назад к вопросам
Middle
3

Как можно использовать встроенные структуры в Go для имитации наследования? Что это даёт и для чего используется?

Компании, где спрашивали
VKVK

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

sobes.tech AI

В 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() {
    d := Dog{Animal{Name: "Buddy"}}
    fmt.Println(d.Name)      // доступ к полю Animal
    fmt.Println(d.Speak())   // вызов переопределённого метода
}

Используется для создания более сложных типов на основе простых, без жёсткой иерархии классов.