Sobes.tech
Назад к вопросам
Senior
7

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

Компании, где спрашивали
техвил

Ответ от нейросети

sobes.tech AI

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

Основные особенности:

  • Композиция через встраивание (embedding): Структура может включать другую структуру как поле без имени, что позволяет "унаследовать" методы вложенной структуры.

  • Интерфейсы: Позволяют описывать поведение, которое может быть реализовано разными типами без явного наследования.

Пример композиции:

type Animal struct {
    Name string
}

func (a Animal) Speak() string {
    return "..."
}

// Dog встраивает Animal

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

Таким образом, Go поощряет композицию и интерфейсы вместо классического наследования, что упрощает архитектуру и повышает гибкость.