Проверяет понимание принципов композиции и разницы от классического наследования.
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 подходит для составления объектов, но не даёт полиморфизма по типу.