Back to questions
Senior
6
Какие варианты наследования есть в Go и в чём его специфика?
Companies where asked
техвил
Answer from AI
sobes.tech AI
В Go нет классического наследования, как в объектно-ориентированных языках. Вместо этого используется композиция и интерфейсы.
Основные особенности:
-
Композиция через встраивание (embedding): Структура может включать другую структуру как поле без имени, что позволяет "унаследовать" методы вложенной структуры.
-
Интерфейсы: Позволяют описывать поведение, которое может быть реализовано разными типами без явного наследования.
Пример композиции:
type Animal struct {
Name string
}
func (a Animal) Speak() string {
return "..."
}
// Dog встраивает Animal
type Dog struct {
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 поощряет композицию и интерфейсы вместо классического наследования, что упрощает архитектуру и повышает гибкость.