Back to questions
Principal
7
Какой из механизмов есть в Go: наследование или композиция?
Companies where asked
Kaspersky
Answer from AI
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 предпочитает композицию наследованию, что упрощает архитектуру и снижает связанность.