Pull to refresh
12
0
Иван Феофанов @Papazian

Бэкенд-разрабочик

Send message

Unit-тестирование в Go с помощью интерфейсов

Reading time4 min
Views13K
Вместо вступления

Эта статья посвящается тем, кто, как и я, пришел в Go из мира Django. Так вот, Django нас избаловал. Стоит только запустить тесты, как он сам, под капотом, создаст тестовую БД, прогонит миграции, а после прогона сам за собой приберёт. Удобно? Безусловно. Вот только времени на прогон миграций уходит — вагон, но это кажется разумной платой за комфорт, плюс всегда есть --reuse-db. Тем сильнее бывает культурный шок, когда бывалые джангисты приходят в другие языки, например в Go. То есть как-это никаких автомиграций до и после? Руками? А базу? Тоже руками? А после тестов? Что, и тирдаун руками? Ну и далее программист, перемежая код ахами и вздохами, начинает писать на Go джангу в отдельно взятом проекте. Конечно, выглядит всё это очень печально. Однако, в Go вполне возможно писать быстрые и надёжные юнит-тесты без использования сторонних сервисов типа тестовой БД или кэша.


Об этом и будет мой рассказ.

Читать дальше →
Total votes 7: ↑4 and ↓3+3
Comments3

Маршалинг и анмаршалинг нестандартных форматов дат в Go

Reading time4 min
Views16K

Думаю, многие согласятся, что работа с датами практически в любом языке программирования это невероятная головная боль. Дата и время не десятичны, часовые пояса — господи, почему они не могут быть просто целыми — ну и конечно бесчисленное множество форматов даты и времени. Можно, конечно, возразить, что мол есть ISO 8601 и чего тебе дураку ещё надо, но давайте, положа руку на сердце, скажем — как часто вам доводилось сталкиваться с соблюдением этого стандарта в сторонних API? Не знаю, как с этим обстоят дела за рубежом, надеюсь, в комментариях мне подскажут, но на постсоветских просторах ситуация — обнять и плакать. Каждый использует свой собственный, только ему удобный, формат времени и даты и разбирайся с этим как хочешь.


Я расскажу про собственный опыт и про найденное решение.

Читать дальше →
Total votes 5: ↑5 and ↓0+5
Comments6

Знакомство с FastAPI

Reading time5 min
Views198K
Вместо предисловия

В нашей команде бытует хорошая практика фиксировать все изменения, которые отправляются в продакшен в гитхабовских релизах. Однако, не вся наша команда имеет доступ в гитхаб, а о релизах хочется знать всем. Так сложилась традиция релиз из гитхаба дублировать в рабочем чате команды в телеграме. Что хорошо, гитхаб позволяет с помощь маркдауна красиво оформить релиз с разделением на секции и ссылками на задачи, которые отправляются на выкатку. Что плохо, простым copy/paste всю эту красоту в телеграм не перенесёшь и приходится тратить время на довольно нудную работу по повторному оформлению релиза, но уже в телеграме. Ну а посколько программисты народ ленивый, я решил этот процесс автоматизировать.
 


Исходные данные:

  • Гитхаб умеет сообщать обо всём, что происходит в репозитории с помощью вебхуков
  • Вся необходимая для формирования релиза информация содержится в теле запроса, который кидает вебхук
  • Авторизация идёт через подпись запроса секретом, который проставляется в настройках вебхука

Соответственно, задача заключается в том, чтобы поднять HTTP API, который сможет принять POST запрос, проверить подпись, извлечь нужную информацию из тела запроса и передать её дальше по инстанции. Как тут не попробовать FastAPI, на который я давно глаз положил?


Кто такой FastAPI?


FastAPI — это фреймворк для создания лаконичных и довольно быстрых HTTP API-серверов со встроенными валидацией, сериализацией и асинхронностью,
что называется, из коробки. Стоит он на плечах двух других фреймворков: работой с web в FastAPI занимается Starlette, а за валидацию отвечает Pydantic.


Комбайн получился легким, неперегруженным и более, чем достаточным по функционалу.

Читать дальше →
Total votes 14: ↑12 and ↓2+14
Comments58

Тестирование не для начинающих

Reading time5 min
Views14K
Я большой фанат тестирования. Я пишу об этом в блог и почтовую рассылку, я обсуждаю это c другими разработчиками в свободное время, я зашел так далеко, что даже создал обучающий курс по тестированию в Go.

Но несмотря на всю мою любовь к тестированию, я не рекомендую его новичкам.

Звучит дико, правда? В этой статье я собираюсь пояснить свою точку зрения более детально, но весь смысл, в итоге, сводится к двум пунктам:

  1. Начинающим не хватает знаний, чтобы писать что-либо кроме самых простых тестов. Это неизбежно приводит к следующему пункту…
  2. Пытаться тренировать навыки, необходимые для написания реалистичных тестов, одновременно с обучением программированию крайне тяжело

Я понимаю, что это, в принципе, один пункт. В любом случае, я разбил его на два для того, чтобы было проще понять.

Знаю, многие из вас не согласятся со мной, но пожалуйста, прочитайте статью, и, если после прочтения вы останетесь при своем мнении, я буду рад обсудить это с вами. В конце концов, я здесь чтобы учиться
Читать дальше →
Total votes 12: ↑11 and ↓1+10
Comments6

Практичный гайд по переменным окружения в Go

Reading time5 min
Views74K
Привет, Хабр! Представляю вашему вниманию перевод статьи A no-nonsense guide to environment variables in Go автора Enda Phelan.

Переменные окружения — лучший способ хранения конфигурации приложения, поскольку они могут быть заданы на системном уровне. Это один из принципов методологии Twelve-Factor App, он позволяет отделять приложения от системы, в которой они запущены (конфигурация может существенно различаться между деплоями, код не должен различаться).
Читать дальше →
Total votes 23: ↑19 and ↓4+15
Comments11

Information

Rating
Does not participate
Registered
Activity