Ответ
Go — это мультипарадигменный язык программирования. Он не придерживается строго одной парадигмы, а сочетает в себе черты нескольких, что делает его гибким и практичным.
Основные парадигмы в Go:
Императивное и процедурное программирование: Это основа языка. Код состоит из последовательности инструкций (императивный подход), которые сгруппированы в функции (процедурный подход) для организации и переиспользования.
Объектно-ориентированное программирование (через композицию): Go реализует ООП, но иначе, чем классические языки вроде Java или C++. Ключевой принцип — "композиция вместо наследования".
- Нет классов и наследования: Вместо них используются
структуры
(для данных) иметоды
(для поведения). - Полиморфизм: Достигается через
интерфейсы
. Любая структура, реализующая все методы интерфейса, неявно удовлетворяет этому интерфейсу.
- Нет классов и наследования: Вместо них используются
Конкурентное (параллельное) программирование: Это одна из самых сильных сторон Go. Язык построен на модели CSP (Communicating Sequential Processes — Взаимодействующие последовательные процессы).
- Горутины (
goroutines
): Легковесные потоки, управляемые средой выполнения Go. - Каналы (
channels
): Типизированные конвейеры для безопасной коммуникации между горутинами.
- Горутины (
Пример ООП-стиля в Go:
// Интерфейс определяет поведение
type Speaker interface {
Speak() string
}
// Структура Dog хранит данные (в данном случае пустая)
type Dog struct{}
// Метод Speak реализует интерфейс Speaker для типа Dog
func (d Dog) Speak() string {
return "Woof!"
}
// Функция принимает любой тип, удовлетворяющий интерфейсу Speaker
func MakeSound(s Speaker) {
fmt.Println(s.Speak())
}
func main() {
d := Dog{}
MakeSound(d) // Выведет: Woof!
}