Назад к вопросам
Касперский
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.