Ответ
Декларативное программирование — это парадигма, в которой вы описываете что хотите получить в результате, а не как этого достичь. Это контрастирует с императивным подходом (как в Go, C++, Java), где вы пошагово описываете алгоритм действий.
Основные примеры декларативных языков и технологий:
SQL (язык структурированных запросов)
- Вы описываете, какие данные вам нужны (
SELECT name FROM users WHERE age > 30
), но не указываете, как базе данных их искать, сканировать таблицы или использовать индексы. Это решает сама СУБД.
- Вы описываете, какие данные вам нужны (
HTML/CSS
- HTML описывает структуру документа (что на странице есть заголовок, абзац, список), а CSS — правила его отображения (какого цвета должен быть текст, какие отступы). Вы не пишете код для отрисовки пикселей на экране.
Языки конфигурации (IaC - Infrastructure as Code)
- Terraform (HCL), Kubernetes (YAML), Ansible. Вы описываете желаемое состояние инфраструктуры (например, "нужен один сервер с такими-то параметрами и одна база данных"), а инструмент сам определяет, какие действия нужно выполнить, чтобы привести систему в это состояние.
Функциональные языки
- Языки вроде Haskell или Lisp часто относят к декларативным, так как программа состоит из описания функций и их взаимосвязей, а не из последовательности команд, изменяющих состояние.
Где с этим сталкивается Go-разработчик?
Хотя Go — это в первую очередь императивный язык, backend-разработчик на Go постоянно работает с декларативными системами:
- Взаимодействие с базами данных через SQL.
- Работа с DevOps-инструментами: написание YAML-манифестов для Kubernetes или Docker Compose, конфигураций для CI/CD.
- Создание шаблонов: использование пакета
html/template
для генерации HTML-страниц, где сам шаблон является декларативным описанием итогового документа.