Назад к вопросам
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 предпочтение отдается композиции и интерфейсам, а не наследованию.