> Как работают встраиваемые структуры (embedding) в Go (Go)

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

Компании: VK

Стек: Go

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

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

Пример:

GO
type Base struct {
ID int
}
func (b Base) PrintID() {
fmt.Println(b.ID)
}
type Derived struct {
Base // встраивание
Name string
}
func main() {
d := Derived{Base: Base{ID: 1}, Name: "test"}
d.PrintID() // вызов метода Base через Derived
fmt.Println(d.ID) // доступ к полю Base напрямую
}

Ключевые особенности:

  • Встраивание не является наследованием в ООП-смысле. Это композиция с синтаксическим сахаром.

  • Если внешняя структура определяет метод с тем же именем, он перекрывает (shadow) метод встроенной структуры.

  • При конфликте имён (например, два встроенных поля с одинаковым именем) компилятор выдаст ошибку - нужно обращаться явно.

  • Встраивать можно не только структуры, но и интерфейсы - это позволяет реализовать интерфейс частично, делегируя реализацию встроенному объекту.

На практике embedding часто используется для расширения функциональности (например, http.ResponseWriter в middleware) или для создания "примесей" (mixins), но с осторожностью, чтобы не усложнить понимание кода.

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

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