Копайте глубже

28 апреля 2022
Копайте глубже

На связи Evrone. Мы не обсуждаем погоду и свежие сплетни, а говорим о новостях и инструментах Go-разработки. В апреле продолжаем рассматривать дженерики, линтеры и туториалы. Enjoy!

Дженерики могут замедлить ваш код

Это не кликбейт, а призыв задуматься. Появление дженериков расширило возможности языка и создало новые проблемы. Разработчики сталкиваются с тем, что в отдельных случаях применение дженериков замедляет работу кода. Понять природу этого явления можно обратившись к процессу компиляции. Здесь полиморфные функции заменяются множеством мономорфных для каждого уникального экземпляра. За счёт этого должна увеличиваться производительность, а накладные расходы сокращаться.

Сами по себе дженерики должны были упростить жизнь разработчика, а не ставить рекорды производительности. Во многих сценариях они и правда ускоряют код, но не во всех. Имплементация дженериков в язык была выполнена с помощью приёма частичной мономорфизации при помощи словарей и контурирования Gcshape.

Автор статьи Generics can make your Go code slower объясняет, что это вовсе не самый мощный инструмент оптимизации кода. Мономорфизация процесс крайне ресурсоёмкий, так что, пожертвовав производительностью, можно значительно ускорить сам процесс компиляции. Так что следите за дженериками и скоростью — если передавать интерфейс обобщенной функции или пытаться использовать дженерики для девиртуализации, то производительность упадёт в разы.

golandci-lint теперь в 1.18

Инструмент для параллельного запуска линтеров получил долгожданный апдейт. Проблема, с которой столкнулись многие разработчики, заключалась в том, что целая пачка линтеров прекращала работу после обновления Go до 1.18. Создатели golangci-lint проделали большую работу и с версии 1.45  вернули большую часть линтеров в строй. 

Некоторые пакеты, такие как nilness и unusedwrite сломались и их необходимо отключить вручную. Еще пострадали правила go-critic (hugeParam, rangeValCopy, typeDefFirst): не работают с дженериками и также должны быть отключены.

Построение gRPC-клиента на Go

В нашем предыдущем дайджесте мы рассказали о крутой статье, детально рассказывающей, как создать gRPC-сервер на Go. Пришло время взглянуть на создание gRPC-клиента. Он отлично подойдет для взаимодействия с сервером из предыдущей инструкции. Настоятельно советуем начать именно с неё, поскольку нам понадобятся Protobuf-файлы, созданные при написании серверной части.

Логика следующая — поднимаем клиентское соединение (пока без TLS, чтобы понять процесс) и вызываем серверный метод/процедуру. Самый цимес gRPC в том, что всё происходит как будто локально. Таким образом на сервере мы получаем обработчик, который и станет реагировать на входящие запросы. Дело за малым — зарегистрировать ответ от сервера. 

Объяснять дальше не имеет смысла — достаточно взглянуть на код. Скелет умещается в 25 строк, а всё остальное уже будет зависеть от конкретной задачи. Ну и помните о безопасности, ведь TLS в примере отключен WithTransportCredentials, но в продакшене его надо будет включить и сконфигурировать.

Трейсы с человеческим лицом

Полезный инструмент panicparse получил поддержку Go 1.18. Этот парсер упрощает жизнь разработчику, делая дампы более информативными. С момента презентации на Gophercon 2015 автор проделал большую работу. Результатом стал более компактный, но при этом ёмкий вывод информации.

Киллер-фича этого инструмента — веб-стек. Трассировку можно получать в виде веб-страницы с локального сервиса. Это действительно удобно, ведь щелчком по строке можно найти проблемное место в коде. Клик по имени функции открывает её описание в документации.

Хотите понять, что вызвало состояние гонки? У вас есть сильно распараллеленное приложение? Здесь panicparse отлично поможет, поскольку умеет отлавливать взаимные блокировки и сбои. Советуем попробовать.

Видео с Go Meetup

Первый в 2022 Evrone meetup о Golang закончился, а полезный контент остался. Если вы не смогли поприсутствовать онлайн, всё можно наверстать. В этот раз в прямом эфире обсуждали дженерики и завершение приложений. Все доклады предзаписаны в студии с хорошим звуком и приятной картинкой.

Graceful Shutdown очень важная практика, которая не только красиво и звучит, но и помогает улучшить качество приложения и пользовательский опыт реальных людей или других приложений. Как именно это делать в языке программирования Go, рассказал Сапогов Никита из Ситилинк.

 

Не менее интересным был доклад Максима Керножицкого из СберМегаМаркета про типичное использование стандартной библиотеки Go на двух версиях языка 1.17 и 1.18. А также он прошёлся по паттерну utils, частично реализовал на дженериках, сравнил производительность и читаемость кода с существующими подходами.

Митапы

Онлайн

Летний GO meetup

29 июня  2022 19:00

Рады сообщить, что у нас запланирован очередной Go Meetup, который пройдёт 29 июня . Детальная информация о мероприятии будет опубликована позже, следите за нашими новостями.

Регистрация

Обучение

Онлайн

Курс Python в Evrone Academy

60 учебных модулей 

Если вы думаете о смене работы или хотите стать частью нашей команды, но у вас недостаточно коммерческого опыта, то теперь можно учиться прямо в Evrone. А после — попасть к нам на оплачиваемую стажировку.

Основа обучения в Evrone Academy — наши высокие требования к разработчикам и опыт в проектах. Мы записали лекции, подготовили текстовые версии, добавили практические задания — это позволит вам подтянуть знания до middle-уровня. На стажировке мы дополним теорию практикой, а после — добро пожаловать на «боевой» проект.

Сейчас академия доступна в режиме early access — можно пройти базовые части по Python или Ruby. Но мы уже готовим новые материалы и практические задания, подписывайтесь на нас в соцсетях, чтобы не пропустить обновления!

Регистрация

Вакансии

Удаленка / Офис

Evrone 

Мы открыты для новых Go-разработчиков. В Evrone можно работать удалённо с первого дня, мы поддерживаем и оплачиваем участие в Open-source проектах, а расти в грейдах можно с помощью честной системы проверки навыков и менторства.

Подробнее

Подписаться
на Digest →
Важные новости и мероприятия без спама
Технологии которыми вы владеете и которые вам интересны
Ваш адрес электронной почты в безопасности - вот наша политика конфиденциальности.