Sobes.tech
Back to questions
Middle
4

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

Companies where asked
VKVK

Answer from AI

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())   // вызов переопределённого метода
}

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