Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: embedding, composition, promotion, no inheritance

Почему встраивание (embedding) — это не наследование?

Проверяет понимание принципов композиции и разницы от классического наследования.

Короткий ответ

Embedding в Go — это композиция, при которой один тип включает поле другого, и его методы «продвигаются» (promoted). В отличие от наследования, нет иерархии типов: встраиваемый тип не становится базовым, нет полиморфного подтипа. Embedding лишь упрощает переиспользование кода и называется «has-a» вместо «is-a».

Длинный ответ

Композиция, не иерархия:

  • Тип A включает поле B:

    type A struct { B }
  • A получает методы B, но A ≠ B.

No subtype:

  • func f(b B) не примет A, хотя A встраивает B.

Promotion vs Inheritance:

  • Методы B доступны как a.Method(), но между типами нет отношения подтип/супертип.

Преимущества:

  • Явная композиция, меньше плотной связи.

  • Упрощённая модель без проблем множественного наследования.

Вывод:

Embedding подходит для составления объектов, но не даёт полиморфизма по типу.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    2

  • Сложность:

    8

Навыки

  • Golang

    Golang

Ключевые слова

#embedding

#composition

#promotion

#no inheritance

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.