ООП в Go?

Middle
1.1k просмотров
AFK Offer AI

Go не классический ООП-язык: нет классов, наследования и конструкторов. Но есть три из четырёх принципов:

Инкапсуляция: через exported/unexported (заглавная/строчная буква)

Полиморфизм: через интерфейсы

type Shape interface {
    Area() float64
}

Композиция вместо наследования: встраивание (embedding)

type Animal struct { Name string }
type Dog struct {
    Animal  // embedding — Dog получает поля и методы Animal
    Breed string
}

Нет абстрактных классов — используй интерфейсы. Нет конструкторов — используй функции-фабрики NewXxx(). Философия Go: "prefer composition over inheritance" доведена до предела — наследования просто нет.

Следующий вопрос

Когда индекс не помогает?