Category : golang

golang
В поисках хорошего стиля. Часть 1. Зачем нам свои линтеры на Go в Островке

Мы написали свои линтеры для Go, которые умеют находить пустые инициализации и проверять экспортируемость полей и методов типов. Сегодня мы поговорим о том, как наша команда пришла к собственному линтеру, и немного погрузимся в детали его реализации.Всем привет! Меня зовут Артём Блохин, я Golang-разработчик в команде интеграций Островка.Если бы «Рождественская история» Чарльза Диккенса была про стиль кода, то получилось бы как-то так:«Начнём сначала: код-стайл умер. Сомневаться в этом не приход…

  • пятница, 30 августа 2024 г. в 00:00:12
golang
Собираем данные из сотни микросервисов, или Как мы разобрали Ozon на кубики, а потом собрали заново

Всем привет! Меня зовут Саша, я руковожу группой разработки Composer Core в Ozon Tech. В этой статье я расскажу о том, как устроена пользовательская часть одного из ведущих российских маркетплейсов, в развитии которой на момент написания статьи участвуют сотни специалистов из десятков команд. При наличии такого количества людей разработка новой функциональности, без риска сломать уже существующую, является достаточно сложной задачей.Поделюсь подходами, которые позволили нам организовать взаимод…

  • пятница, 30 августа 2024 г. в 00:00:12
golang
Типизированные eDSL на Go

В статье показано, как реализовать встраиваемый типизированный DSL на Go. Рассматриваемое представление будет типобезопасным, т.е. не позволит сконструировать некорректные выражения (термы), но допускает разные интерпретации выражений. Система типов DSL один-к-одному маппится на систему типов Go, поэтому весь type-checking производится компилятором.Обычно для этого требуются GADT или HKT. В статье показан механизм кодирования выражений, который не зависит ни от первого, ни от второго.В отличие …

  • понедельник, 26 августа 2024 г. в 00:00:15
golang
Применения Continuation-passing style в Go

В этой статье мы рассмотрим концепцию программирования в стиле передачи продолжений и примеры его применения, исследуем, как этот стиль может улучшить читаемость и поддержку кода в приложениях на Go. Также обсудим потенциальные подводные камни и ограничения, чтобы дать полное представление о том, как и когда использовать его в практике разработки.ВведениеПри обычном (Direct style) вызове мы подаём на вход функции параметры и на выходе ожидаем какое-то значение. Например, функция сложения:func a…

  • воскресенье, 25 августа 2024 г. в 00:00:06
golang
Лучшая система шаблонов в Go

Привет, Хабр!В этой статье хочу поговорить про, пожалуй, мою самую любимую библиотеку для Go. Это Jet templates. Библиотека, которая очень упрощает работу с шаблонами(templates) в Go.Работать со встроенными шаблонами в Го я очень не люблю. Прописывание мап, неудобная работа в самих шаблонах. Jet это решает.Передача данныхДля того, чтобы сделать мапу с данными для шаблона, необходимо написать всего одну строку:data := make(jet.Varmap)А для того, чтобы что-то туда записать, необходимо написать та…

  • четверг, 22 августа 2024 г. в 00:00:08
golang
«Бобер выдыхай»: Go, WinAPI и ассемблер

Что первым приходит в голову разработчика при слове «Go»? Google и микросервисы? Я тоже так думал, но реальность оказалась значительно интересней.Gopher — маскот Golang на самом деле никакой не бобер а целый отдельный вид, у нас такие не живут.Волшебный мир WindowsЭта статья родилась внезапно — из профессионального спора о реалиях и возможностях языка Go, которые как оказалось выходят сильно далеко за рамки его традиционной сферы примененения.Немного матчасти для тех кто не знает об этом языке:…

  • четверг, 22 августа 2024 г. в 00:00:07
golang
Под капотом облаков. Строим облачную консоль. Часть 1. Знакомство

С чем предстоит иметь делоПрежде чем перейти к главному, кратко обозначу, что конкретно мы в этой статье будем разбирать. Ведь область облачных вычислений настолько велика, что рассказать про все нюансы облаков вряд ли получится. И во многом это даже бессмысленно, так как информации про виртуализацию и проектирование решений в облаке, итак, предостаточно на просторах интернета. Хотя так или иначе виртуализацию мы затронем, когда будем выбирать чем консоль будет управлять (спойлер: Openstack + O…

  • четверг, 22 августа 2024 г. в 00:00:06
golang
Продвинутые структуры Redis

Привет, Хабр! Я Олег Арутюнов, Go разработчик из Контура. Сейчас я работаю над проектом Мойра – опенсорс-системе реалтайм-алёртинга. Мойру разработали в Контуре ещё в 2015 году для того, чтобы доставлять алёрты на основе метрик из системы мониторинга Graphite, позже появилась поддержка метрик из Prometheus/VictoriaMetrics. Наша задача в случае поломки какой-то системы в Контуре, как можно быстрее уведомить о ней пользователей, разбудить их, достать и заставить всё починить.Пользователь Мойры со…

  • вторник, 20 августа 2024 г. в 00:00:08
golang
Написание функционального тестирования в Go

Не все знают, как писать функциональные тесты. В этой статье будут библиотеки, фишки про функциональные тесты, а самое главное - попрактикуемся их писать на примере Rest APIФункциональное тестированиеФункциональное тестирование - это такой тип тестирования, когда проверяется не маленькая часть, а вся программа, при этом сама программа не знает о том, что ее тестируюют. Правильно ли она работает при определенных условиях, что вернет, какая будет ошибка и т.дБиблиотекиВот несколько библиотек для …

  • воскресенье, 18 августа 2024 г. в 00:00:09