Category : golang

golang
Переходим с Node.js на Go… но это не точно

Создатель Node.js Райан Даль в одном из своих интервью заявил, что для написания серверов предпочёл бы Go. Стали даже появляться заявления о скорой кончине Node.js. Упомянутое интервью Даля состоялось в 2017 году, Go с тех пор укрепил свои позиции, а сам Даль потом переходил на Rust и даже написал еще одну среду для выполнения серверного JS - Denо. Однако и сейчас можно увидеть статьи о переходе с Ноды на Голанг. Мне же представляется, что вопрос о переходе между этими технологиями не стоит воо…

  • суббота, 15 марта 2025 г. в 00:00:07
golang
15 мс на ответ: как мы добились высокой скорости работы API Gateway

Меня зовут Николай Кокоулин, я бэкенд-разработчик в Ви.Tech — это IT-дочка ВсеИнструменты.ру. В этой статье поделюсь нашим опытом о том, как мы в ходе разделения монолитного приложения на микросервисы столкнулись с вызовом: как сохранить производительность и масштабируемость системы при росте нагрузки. Одной из ключевых задач стало создание API Gateway, способного выдерживать нагрузку свыше 1000 rps. В нашей системе пользователи часто делают выборки по сложным фильтрам, что создает дополнительн…

  • суббота, 15 марта 2025 г. в 00:00:07
golang
Запускаем код на Go снизу вверх

Всем привет! В продолжение прошлой статьи, где мы залезли в компилятор Go и разобрались в его работе, добавив поддержку while на уровне компилятора, я хочу чуть глубже погрузиться в тему. Советую прочитать ту статью, если вы еще не сделали этого.В этой статье, как небольшое дополнение к предыдущей, я хочу рассмотреть, как Go работает с AST, и заодно реализовать конструкцию InverseCode{} (название Inverse оказалось занято пакетом math), которая будет читать код снизу вверх.Вот примерный результа…

  • пятница, 14 марта 2025 г. в 00:00:15
golang
Go 1.24 — swiss tables новая реализация map

различные модели потребления памятиВ Go 1.24 встроенная реализация map была полностью переработана и теперь основана на Swiss Table. В этой статье мы рассмотрим, какие преимущества даёт Swiss Table по сравнению с традиционными хеш‑таблицами.В приведённом выше графике мы видим заметно различающиеся модели потребления памяти между SwissMap и встроенной картой (map) в Go. Для сравнения также включено потребление памяти массивом, хранящим тот же набор данных. Потребление памяти стандартной реализац…

  • пятница, 14 марта 2025 г. в 00:00:14
golang
Кастомные memory pools в Golang

Привет, Хабр!Сегодня рассмотрим, почему стандартный sync.Pool в Go не всегда спасает, когда речь идёт о высоконагруженных сервисах, и как кастомные memory pools позволяют взять под контроль работу с памятью. Что не так с sync.Pool? sync.Pool отлично подходит для переиспользования объектов в простых сценариях. Он работает хорошо, когда нагрузка стабильна и объекты используются короткое время. Но как только запускаем систему с жесткими требованиями к задержкам, возникают две проблемки:Непредсказу…

  • воскресенье, 9 марта 2025 г. в 00:00:07
golang
Fan-Out, Fan-In с динамической балансировкой горутин в Golang

Привет, Хабр!Когда речь заходит о конкурентности в Go, паттерн Fan‑Out, Fan‑In — одна из важных концепций на мой взгляд. Он позволяет распределять задачи между несколькими горутинами и затем собирать результаты обратно в один поток.Что такое Fan-Out, Fan-In?Fan‑Out означает, что одна горутина отправляет задачи нескольким другим. Это позволяет распараллелить вычисления, что полезно при работе с IO‑операциями, загрузкой данных или обработкой запросов.Fan‑In — это обратный процесс. Когда несколько…

  • воскресенье, 9 марта 2025 г. в 00:00:06
golang
Как я создавал Observability для своих pet-проектов. Часть 2

В первой части мы развернули базовый стек для сбора метрик, логов и трейсов и интегрировали его с приложением на Laravel. Теперь покажу настройку Observability на примере простого Golang-приложения — настроим в нём структурированные логи, распределённый трейсинг и метрики, а также интегрируем с нашим стеком.Для нетерпеливых, по традиции можете сразу посмотреть репозиторий с примером. Запускаете docker-compose up в корне и docker compose up в ./examaples/golang, переходите на http://localhos…

  • суббота, 8 марта 2025 г. в 00:00:15
golang
Как я написал пакет для быстрого создания и управления формами в Go

Привет, Хабровчане! Сегодня я хочу рассказать о своём небольшом проекте - пакете goform, который я написал для упрощения работы с HTML-формами в Go. Это не просто ещё один пакет, а результат моего опыта и желания сделать процесс работы с формами более удобным и эффективным. В этой статье я поделюсь историей создания, функциональностью пакета и тем, как он может быть полезен другим разработчикам.Заранее хочу сказать что статья никоим образом не предназначена для пиара, понимаю что задачка фактич…

  • суббота, 8 марта 2025 г. в 00:00:14
golang
Design by Contract на минималках: пишем assertions и улучшаем устойчивость на Go

Всем привет! Меня зовут Александр Иванов, я старший разработчик в YADRO, работаю над созданием средств управления элементами опорной сети и пишу на Go. Мы с командой разрабатываем продукт для сервисов сотовой связи — качество нашей работы влияет на пользовательский опыт тысяч людей. Поэтому часто мы ищем решения, как повысить устойчивость работы кода в продакшене. Об одном из таких решений я расскажу в этой статье. Design by Contract — подход к проектированию ПО, в котором взаимодействие компон…

  • суббота, 8 марта 2025 г. в 00:00:13