Как реализовано ООП в Go

«Как реализовано ООП в Go» — вопрос из категории Golang, который задают на 38% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Go нет классического ООП с классами и наследованием, но есть альтернативные подходы:

  1. Структуры (structs) - заменяют классы. Могут иметь методы:
type User struct {
    Name string
}

func (u User) Greet() string {
    return "Hello, " + u.Name
}
  1. Интерфейсы - реализуют полиморфизм:
type Greeter interface {
    Greet() string
}
  1. Композиция вместо наследования:
type Admin struct {
    User  // встраивание
    Role string
}
  1. Методы могут быть привязаны к любым типам (не только структурам).

Go использует минималистичный подход: нет конструкторов, деструкторов, перегрузки методов или операторов. Вместо наследования - композиция, вместо абстрактных классов - интерфейсы.