Всем привет! 30 мая пройдёт второй онлайн-митап по Go. В организаторах — ребята из сообществ Go Yola и Golang Kazan. Разберём, как организовать тестирование микросервисов, какой способ реализации DI на Go лучше, почему гофер синий и как выжить с автосгенеренным go-swagger кодом.
Вас ждёт четыре концентрированных доклада от разработчиков МТС, iSpring, Percona и Toggl, викторина по Go и много живого общения. Под катом тезисы докладов, ссылка на видеотрансляцию и интервью со спикерами. Не переключайтесь!
![](https://habrastorage.org/r/w1560/webt/jh/lq/e4/jhlqe4fh3g8xl-hhyaii30b5n6g.png)
Стартуем на YouTube-канале iSpring Tech 30 мая в 16:00. Это суббота. Каждый доклад — прямой контакт со спикерами: задавайте вопросы голосом, пишите в чат. После каждого выступления открываем переговорку, в которой можно детально обсудить тему. Горячие споры и острые вопросы приветствуются.
В конце митапа — викторина, на которой можно проверить свои силы в знании Go :)
Подключиться к митапу →
Полная программа митапа →
![](https://habrastorage.org/r/w1560/webt/hq/y8/if/hqy8ifpa6bd04gudlauvvb4pmoc.png)
Её выбрали люди :) Мы проводили открытое голосование среди разработчиков на выбор темы. В нём приняло участие 85 человек. Большинство проголосовало за тестирование.
Enum'ов и полной проверки всех значений или типов в switch/case. Линтеры решают эту проблему только частично. Generic'и на близком втором месте — type switch по всем базовым типам я пишу чаще, чем хотелось бы.
Почему бы? Я взял у него интервью :)
![](https://habrastorage.org/r/w1560/webt/or/fw/hf/orfwhf2sfvgrurhr857rey9vg7o.png)
Потому что уже очень давно меня волнует вопрос: «Почему наш код в конце концов превращается в кашу и как этому противостоять»?
Как-то раз я проводил рефакторинг одного legacy-проекта. Он активно использовал concurrency. Никакой документации и спецификации не было. По ходу работы я вынес переменную Token в поле структуры HttpClient. Мне показалось, что это общий токен доступа к микросервису. Оказалось — это был токен, связанный с пользователем.
Когда изменение попало в production, одни пользователи получили данные других. Срочно пришлось выводить часть системы на техобслуживание и оперативно вычищать БД от утекших данных. Хорошо, что данные не были персональными — ассоциировать их с конкретными людьми было невозможно.
Привет, приятно познакомится.
![](https://habrastorage.org/r/w1560/webt/qr/ym/7w/qrym7wvsuo4dwdobmq24udzwrjm.png)
Код многих популярных инструментов для DevOps написан на Go. Он не всегда блистает чистотой. Например, в коде docker и kubernetes много вызовов panic. Хотя бесцельное использование panic считается плохой практикой в Go.
Я уверен, что с чистой архитектурой opensource проекты на Go привлекли бы больше контрибьюторов. Ведь гораздо проще улучшать проект, который не превращен в ком грязи десятками глобальных переменных, тесно связанных пакетов и монструозных функций с нарушением принципа Single Responsibility.
Как-то раз с коллегами мы писали бэкенд для редактора статей. Он был стадии Testing&Fixing, когда тестировщик заметил — утром пропадают данные всех статей. Оказалось, другой сервис каждую ночь по cron присылает список статей на удаление. Если удалять нечего, он присылал пустой список. А в нашем сервисе пустой список означал «удалить все статьи».
С тех пор я всем советую в любых методах API для изменения/удаления данных всегда требовать флага, указывающего, что затрагиваются все записи. Или вводить отдельный метод, который удаляет/изменяет всё.
Спросил бы, почему гофер синий.
![](https://habrastorage.org/r/w1560/webt/qu/cb/h-/qucbh-id89lw9zuh7d_4nbmbsqy.png)
В нескольких компаниях сталкиваюсь с использованием go-swagger. И всегда это сопряжено с трюками и хаками. Хочу поделиться ими с сообществом, чтобы людям не приходилось перестраивать уже построенный велосипед.
Однажды я с командой участвовал в хакатоне. На первом этапе мы делали приложение с бэкендом на Go и фронтендом на iOS. В итоге чуть ли не две трети всего времени занял процесс обмена информацией по изменением в API и реализации API на бэкенде.
На втором этапе мы тоже делали приложение на Go и iOS. В этот раз я использовал swagger для описания API и go-swagger для генерации серверной инфраструктуры по этому API. Это сэкономило 6 часов. Благодаря этому я раньше закончил серверную часть и смог нормально поспать ночью.
Болел в детстве :)
До встречи 30 мая в прямом эфире. А чтобы не пропустить начало, подписывайтесь на ютуб-канал iSpring Tech, вступайте Go Yola и Golang Kazan. Здесь мы публикуем горячие доклады с митапов.
P.S. И все-таки, почему гофер синий? Свою версию пишите в комментариях.
Вас ждёт четыре концентрированных доклада от разработчиков МТС, iSpring, Percona и Toggl, викторина по Go и много живого общения. Под катом тезисы докладов, ссылка на видеотрансляцию и интервью со спикерами. Не переключайтесь!
![](https://habrastorage.org/webt/jh/lq/e4/jhlqe4fh3g8xl-hhyaii30b5n6g.png)
Прямой эфир 30 мая
Стартуем на YouTube-канале iSpring Tech 30 мая в 16:00. Это суббота. Каждый доклад — прямой контакт со спикерами: задавайте вопросы голосом, пишите в чат. После каждого выступления открываем переговорку, в которой можно детально обсудить тему. Горячие споры и острые вопросы приветствуются.
В конце митапа — викторина, на которой можно проверить свои силы в знании Go :)
Подключиться к митапу →
Полная программа митапа →
4 горячих доклада по Go
![](https://habrastorage.org/webt/hq/y8/if/hqy8ifpa6bd04gudlauvvb4pmoc.png)
Тестирование (микро)сервисов — Алексей Палажченко, Percona
— плюсы и минусы тестирования микросервисов;
— что делать с аутентификацией и авторизацией;
— как не уронить тестами прод.
Почему ты выбрал эту именно тему?
Её выбрали люди :) Мы проводили открытое голосование среди разработчиков на выбор темы. В нём приняло участие 85 человек. Большинство проголосовало за тестирование.
Чего тебе больше всего не хватает в Go?
Enum'ов и полной проверки всех значений или типов в switch/case. Линтеры решают эту проблему только частично. Generic'и на близком втором месте — type switch по всем базовым типам я пишу чаще, чем хотелось бы.
Что бы ты сказал Робу Пайку при встрече?
Почему бы? Я взял у него интервью :)
![](https://habrastorage.org/webt/or/fw/hf/orfwhf2sfvgrurhr857rey9vg7o.png)
Dependency Injection and it’s friends (in Go) — Антон Кучеров, Toggl
— что такое DIP, IoC и DI;
— какие проблемы решаются с помощью этих понятий;
— ряд вариантов реализации DI в Go.
Почему ты выбрал именно эту тему?
Потому что уже очень давно меня волнует вопрос: «Почему наш код в конце концов превращается в кашу и как этому противостоять»?
Расскажи о самом твоём большом косяке на Go
Как-то раз я проводил рефакторинг одного legacy-проекта. Он активно использовал concurrency. Никакой документации и спецификации не было. По ходу работы я вынес переменную Token в поле структуры HttpClient. Мне показалось, что это общий токен доступа к микросервису. Оказалось — это был токен, связанный с пользователем.
Когда изменение попало в production, одни пользователи получили данные других. Срочно пришлось выводить часть системы на техобслуживание и оперативно вычищать БД от утекших данных. Хорошо, что данные не были персональными — ассоциировать их с конкретными людьми было невозможно.
Что бы ты сказал Робу Пайку при встрече?
Привет, приятно познакомится.
![](https://habrastorage.org/webt/qr/ym/7w/qrym7wvsuo4dwdobmq24udzwrjm.png)
Чистая архитектура в автоматизации» — Сергей Шамбир, iSpring
— автоматизация как процесс;
— как для неё применить принципы чистой архитектуры;
— опыт iSpring в написании утилит автоматизации на Go.
Расскажи что-нибудь, что не войдет в доклад, но отлично иллюстрирует тему
Код многих популярных инструментов для DevOps написан на Go. Он не всегда блистает чистотой. Например, в коде docker и kubernetes много вызовов panic. Хотя бесцельное использование panic считается плохой практикой в Go.
Я уверен, что с чистой архитектурой opensource проекты на Go привлекли бы больше контрибьюторов. Ведь гораздо проще улучшать проект, который не превращен в ком грязи десятками глобальных переменных, тесно связанных пакетов и монструозных функций с нарушением принципа Single Responsibility.
Расскажи о самом твоём большом косяке на Go
Как-то раз с коллегами мы писали бэкенд для редактора статей. Он был стадии Testing&Fixing, когда тестировщик заметил — утром пропадают данные всех статей. Оказалось, другой сервис каждую ночь по cron присылает список статей на удаление. Если удалять нечего, он присылал пустой список. А в нашем сервисе пустой список означал «удалить все статьи».
С тех пор я всем советую в любых методах API для изменения/удаления данных всегда требовать флага, указывающего, что затрагиваются все записи. Или вводить отдельный метод, который удаляет/изменяет всё.
Что бы ты сказал Робу Пайку при встрече?
Спросил бы, почему гофер синий.
![](https://habrastorage.org/webt/qu/cb/h-/qucbh-id89lw9zuh7d_4nbmbsqy.png)
Go-Swagger в продуктиве: взлеты и падения» — Илья Казначеев, МТС
— как go-swagger упрощает командную разработку;
— как ускорить работу над boilerplate-кодом;
— почему сгенерированный код принуждает плясать под свою дудку и как с этим бороться.
Почему ты выбрал именно эту тему?
В нескольких компаниях сталкиваюсь с использованием go-swagger. И всегда это сопряжено с трюками и хаками. Хочу поделиться ими с сообществом, чтобы людям не приходилось перестраивать уже построенный велосипед.
Расскажи что-нибудь, что не войдет в доклад, но отлично иллюстрирует тему
Однажды я с командой участвовал в хакатоне. На первом этапе мы делали приложение с бэкендом на Go и фронтендом на iOS. В итоге чуть ли не две трети всего времени занял процесс обмена информацией по изменением в API и реализации API на бэкенде.
На втором этапе мы тоже делали приложение на Go и iOS. В этот раз я использовал swagger для описания API и go-swagger для генерации серверной инфраструктуры по этому API. Это сэкономило 6 часов. Благодаря этому я раньше закончил серверную часть и смог нормально поспать ночью.
Твоя версия, почему гофер синий?
Болел в детстве :)
До встречи 30 мая в прямом эфире. А чтобы не пропустить начало, подписывайтесь на ютуб-канал iSpring Tech, вступайте Go Yola и Golang Kazan. Здесь мы публикуем горячие доклады с митапов.
P.S. И все-таки, почему гофер синий? Свою версию пишите в комментариях.