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

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

Компании, где спрашивали
Лаборатория Касперского

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

sobes.tech AI

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

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

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

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

package main
import "fmt"

type Animal struct {
    Name string
}

func (a Animal) Speak() {
    fmt.Println(a.Name, "говорит")
}

type Dog struct {
    Animal // встраивание Animal
}

func main() {
    d := Dog{Animal{Name: "Бобик"}}
    d.Speak() // вызов метода Animal через Dog
}

Таким образом, в Go предпочтение отдается композиции и интерфейсам, а не наследованию.