Tag Archive: golang

Unit тесты для zap логгера в Golang

Zap — популярная в Go лог система, написанная убером. Задача, которая однажды встала передо мной — как проверить что все нужные сообщения логгера  были вызваны в коде? Для этого я нашел решение как сам zap тестирует свою логику — при…
Read more

Prometheus middleware для Chi

Для вывода Prometheus метрик с роутера Chi нет официального Middleware. Поэтому установим расширение 766b/chi-prometheus:

Далее импортируем promhttp:

И регистрируем HTTP handler:

И в принципе всё. Теперь все роуты будут проходить через chiprometheus и все данные роутера будут…
Read more

Golang: FileServer для go-chi

Пример работы файлового сервера для go-chi:

До начала работы нужно задать root — корневую папку для работы файлового сервера. Все запросы начинающиеся на /* будут идти на заданный файловый сервер. Возможно также задать только определенный роут, допустим /static/*

Сниппет: Отправка POST json в Golang

Сниппет для POST отправки JSON string:

 

Отправка Telegram сообщений с Go

При помощи библиотеки go-telegram-bot-api достаточно легко написать свою программу на Go для отправки сообщений в Telegram. Библиотека имеет множество реализованных методов для работы c Telegram API — отправка сообщений, загрузка изображений и медиафайлов, ответ на сообщения в группах и отслеживание…
Read more

Автообновление Go проектов при помощи github-selfupdate

go-github-selfupdate это довольно хорошая реализация поиска и обновлений новых версий приложения если вы используете GitHub в качестве хостинга релизов. Библиотека поддерживает поиск новых semver релизов через GiHub releases. Подключить поиск и загрузку новых обновлений достаточно просто: Ваш проект должен находиться на…
Read more

Golang — поднятие тест сервера при unit тестах

При помощи данного сниппета мы можем зарегистрировать нужные нам http роуты для теста и запустить в отдельной go-рутине минимальный веб сервер. Данная техника полезна при тестировании различных HTTP запросов без вовлечения внешних ресурсов. Тем самым мы можем проверить наш…
Read more

Поднятие Docker контейнеров в тестах с Go и Dockertest

Для запуска интеграционных тестов в Golang часто требуются внешние зависимости в виде базы данных, брокера сообщений либо еще каких-то сторонних компонентов.В итоге для поднятия внешних сервисов мы используем Docker и пишем docker-compose.yml файл который выглядит как-то так:

Далее до…
Read more

Golang — использование envconfig для environment variables

Для работы с переменными окружения в Golang без использования библиотеки envconfig просто не обойтись:

Библиотека также поддерживает default значения, required флаги, custom декодеры и многое многое другое.

Golang — Mock для sqlx драйвера базы данных

Для написания юнит тестов часто требуется «мокать» часть зависимостей, одна из самых распространенных — соединение и операции с базой данных. Если нет возможности использовать внедрение зависимости и использовать интерфейсы типа ExecerContext на входе функции то в дело вступают не совсем чистые…
Read more