> Как в Go встраивание заменяет наследование (Go)

Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы

Компании: Лига Цифровой Экономики

Стек: Go

> Пример ответа

В Go встраивание (embedding) позволяет включать поля и методы одного типа в другой без явного наследования. Вместо иерархии классов Go использует композицию: структура может встраивать другую структуру, и все её методы становятся доступны напрямую. Например:

GO
type Animal struct {
Name string
}
func (a Animal) Speak() string {
return "I am " + a.Name
}
type Dog struct {
Animal // встраивание
Breed string
}
func main() {
d := Dog{Animal: Animal{Name: "Rex"}, Breed: "Labrador"}
fmt.Println(d.Speak()) // "I am Rex" - метод Animal доступен у Dog
}

Это заменяет наследование, так как:

  • Повторное использование кода: методы встроенного типа становятся частью внешнего типа.
  • Полиморфизм через интерфейсы: если Animal реализует интерфейс, Dog тоже его реализует (но не автоматически, нужно явное соответствие).
  • Отсутствие виртуальных методов: встраивание не поддерживает переопределение методов как в классическом наследовании - если Dog определяет свой Speak(), он скрывает метод Animal.

Таким образом, встраивание даёт гибкость композиции, избегая проблем множественного наследования и жёстких иерархий.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью