Sobes.tech
Назад к вопросам
Middle
1

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

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

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

sobes.tech AI

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

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

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

type Logger struct {
    prefix string
}

func (l Logger) Log(message string) {
    fmt.Println(l.prefix, message)
}

// Встраиваем Logger в App

type App struct {
    Logger
    name string
}

func main() {
    app := App{
        Logger: Logger{prefix: "[App]"},
        name:   "MyApp",
    }
    app.Log("started") // вызов метода Logger через композицию
}

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