Ответ
В Go отсутствует классическое ООП с классами, наследованием и иерархией типов. Вместо этого язык предлагает прагматичный и гибкий подход, основанный на композиции и интерфейсах.
Ключевые концепции:
-
Структуры (structs) вместо классов. Структуры используются для группировки данных. Они являются аналогом полей класса.
type User struct { ID int Name string }
-
Методы для любых типов. В Go методы можно определять для любого именованного типа, а не только для структур. Это позволяет добавлять поведение к простым типам.
func (u User) Greet() string { return "Hello, my name is " + u.Name }
-
Композиция вместо наследования. Go поощряет использование композиции через встраивание (embedding). Встроенная структура делегирует свои поля и методы родительской структуре, что позволяет достичь повторного использования кода.
type Admin struct { User // Встроенный тип User AccessLevel string } // admin := Admin{} // admin.Name = "John Doe" // Доступ к полю встроенной структуры // admin.Greet() // Доступ к методу встроенной структуры
-
Интерфейсы для полиморфизма. Интерфейсы в Go определяют поведение (набор методов). Тип удовлетворяет интерфейсу неявно, если он реализует все его методы. Это обеспечивает гибкость и слабую связность компонентов.
type Greeter interface { Greet() string } // Тип User неявно реализует интерфейс Greeter
Итог: Go придерживается принципа "композиция вместо наследования", предлагая более простую и гибкую модель. Отсутствуют конструкторы, деструкторы, перегрузка методов и операторов, что делает код более предсказуемым и легким для чтения.