Sobes.tech
Назад к вопросам
Principal
6

Какой из механизмов есть в Go: наследование или композиция?

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

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

sobes.tech AI

В Go отсутствует классическое наследование, как в C# или Java. Вместо этого Go использует композицию и интерфейсы для повторного использования кода и полиморфизма.

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

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

type Animal struct {
    Name string
}

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

type Dog struct {
    Animal // встраивание 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 предпочитает композицию наследованию, что упрощает архитектуру и снижает связанность.