Tag Archive: golang

CLI interactive integration tests с expect и Go — часть 2

В прошлой части мы сделали exp файл, который бы запускал наше интерактивное консольное приложение и взаимодействовал с ним. В этой части мы напишем Go test, который будет при помощи cmd.Exec запускать exp файл, ждать ответа и делать какие-либо assertions. Пример…
Read more

CLI interactive integration tests с expect и Go — часть 1

Тестирование интерактивных консольных приложение получилось довольно интересной задачей. Как пример напишем простейшие консольное приложение при помощи библиотеки survey: package main import ( «fmt» «github.com/AlecAivazis/survey/v2» ) // the questions to ask var qs = []*survey.Question{ { Name: «name», Prompt: &survey.Input{Message: «What…
Read more

Golang: Получение stock price с Yahoo Finance

При помощи https://github.com/antchfx/htmlquery мы можем легко получать и парсить данные с веб страницы Yahoo Finance. Нас интересует именно stock price. Для этого в начале находим на странице нужный нам блок: <div class=»D(ib) Mend(20px)» data-reactid=»31″> <span class=»Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)» data-reactid=»32″>63.50</span>…
Read more

Golang — Упаковка ресурсов и статических файлов в бинарник с go rice

Задача упаковки статических ресурсов в один жирный бинарник стоит не так часто, но в одном из проектов все-таки это понадобилось. Посмотрев на разные библиотеки из awesome go, остановился на наверное самом простом и более для меня понятном go rice. В…
Read more

Разработка HomeKit аксессуара на Golang

https://github.com/brutella/hc — прекрасная библиотека для написания обработчиков своих аксессуаров по протоколу HomeKit. Что предоставляет библиотека? Удобный интерфейс для объявления своего аксессуара и обработка сигналов с пульта управления Home App в ios. Давайте попробуем написать новый обработчик аксессуара и добавить его внутри…
Read more

Golang — использование rate limiter в коде

Rate limiting — ограничение скорости запросов в определенной системе. К примеру вы можете поставить ограничения на ваш веб сервер — не более 10 запросов в секунду. Возможно создание ограничения только для определенного клиента или типа машины. В Golang добавление rate limit…
Read more

Golang — функция вывода user IP

В случае использования вашего приложения через load balancer или через различные прокси вида Cloudflare задача вывода клиентского IP адреса заключается в правильной выборке header. От X-Real-Ip до CF_CONNECTING_IP или же X-Original-Forwarded-For. Для этого я написал простую функцию по выборке IP адреса: func readUserIP(r…
Read more

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

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

Prometheus middleware для Chi

Для вывода Prometheus метрик с роутера Chi нет официального Middleware. Поэтому установим расширение 766b/chi-prometheus: // Init router r := chi.NewRouter() // Init middleware … r.Use(chiprometheus.NewMiddleware(«my-api»)) … // Init some routes r.Get(«/api», apiHandler) Далее импортируем promhttp: «github.com/prometheus/client_golang/prometheus/promhttp» И регистрируем HTTP handler:…
Read more