Автоматизация работы программиста golang

e5c89f40105680e76652469d3863b8e3

Программист должен автоматизировать свою работу в первую очередь,
а то получится как сапожник без сапог.
Все этапы работы можно частично автоматизировать.
Рассмотрим основные, характерные этапы создания сервисов:

  1. Проектирование базы данных

  • это творческая работа, которую никак не автоматизируешь. После создания, базу данных надо нарисовать в виде графической схемы. Есть много разных приложения для автоматического создания ERD-diagram, однако они все отображают стрелки связей только до таблицы, а не до нужной колонки, и не имеют возможности редактировать и обновлять отредактированную схему — поэтому пришлось создать своё приложение image_database.

  1. Создание логгера необходимо в первую очередь т.к. оно будет использоваться во всех модулях сервиса. У нас логгер LOKI (grafana), который берёт текст логов из консоли, сохраняет к себе, и имеет интерфейс просмотра. Такой логгер прост для программиста т.к. выводить текст логов надо просто в консоль вывода, и не надо думать о том как его сохранять, просматривать и др. Мой логгер логгер использует известный logrus, имеет улучшения:

  • единый логгер для всех модулей (не надо думать где его хранить)

  • единое форматирование, добавляющее к логу: дату, время, миллисекунды, имя и номер строки исходного файла .go, имя функции, уровень (info, error и др.)

  • кликабельная ссылка внутри IDE Goland для перехода сразу к нужной строке кода. С такими настройками форматирования очень легко найти нужное место в коде с ошибкой и др.

  1. Телеграм-бот с ошибками
    Для своевременного обнаружения, ошибки надо автоматически находить и присылать в телеграм мессенджер, с указанием:

  • дата, время, текст ошибки

  • логин (имя) ответственного за этот микросервис

  • URL ссылка быстрого перехода в браузер с логами (grafana)

  1. CRUD генератор исходного кода
    У каждой таблицы базы данных должен быть свой модуль, ответственный за выполнение CRUD операций: Create + Read + Update + Delete,
    а также, для выполнения этих операций по сети по протоколам GRPC или NRPC.
    Для множества таблиц в базе данных такой код писать долго — поэтому нужен кодогенератор исходного кода.
    Мой кодогенератор создаёт готовый микросервис на языке golang, который можно сразу запустить, создаётся код для каждой таблицы в базе данных, в том числе юнит-тесты.

  2. Подключение к внешним сервисам
    Обычно используется много внешних сервисов типа Postgres SQL, Kafka, NATS, CAMUNDA и др.,
    к которым надо:

  • загрузить настройки подключения из файла или переменных окружения

  • подключиться

  • отключиться

  • graceful shutdown (правильное отключение)

    Чтобы не писать много кода каждый раз для выполнения этих операций, я создал свою библиотеку starter, которая легко делает все эти операции одной строчкой кода, в том числе операции указанные выше.

    Пример:
    postgres_gorm.StartDB ()
    nats.StartNats ()
    camunda.StartCamunda ()

  1. Документация
    Хорошую документацию автоматически не сделаешь, но кое-что можно:

  • автоматически нарисовать граф зависимостей модулей языка golang, с отображением директорий с утилитой image_packages

  • автоматически нарисовать граф подключений к внешним сервисам с утилитой image_connections

    Подробнее в предыдущей статье статье.

Желаю всем облегчить себе работу с помощью автоматизации.

© Habrahabr.ru