Category : golang

golang
Глубокий разбор новых указателей в Go 1.24: слабые указатели и их реализация

Go 1.24 привнес в язык новый тип указателей – слабые указатели (weak pointers). В этой статье разберёмся, что они из себя представляют, как устроены внутри компилятора и runtime, а также как их использовать для оптимизации кода. Мы подробно изучим внутреннее устройство новых указателей, примеры их применения (например, для создания самоочищающихся кешей) и посмотрим, как они работают под капотом с точки зрения управления памятью и производительности.Что такое слабые указатели и зачем они нужныС…

  • воскресенье, 16 марта 2025 г. в 00:00:08
golang
Новая реализация map в Go 1.24: Смотрим под капот

ВведениеВ версии Go 1.24 разработчики кардинально изменили внутреннюю реализацию map, перейдя с традиционного механизма цепочек бакетов на Swiss Table. Этот новый подход улучшает производительность, снижает использование памяти и делает операции с map более эффективными. В этой статье мы не будем смотреть принципиальную разницу в подходах, это вы можете прочитать в оригинальной статье или переводе на хабре. Я же хочу быстро посмотреть изменения в коде, включая создание map, поиск элементов, обр…

  • суббота, 15 марта 2025 г. в 00:00:11
golang
Меньше кода, больше результата: применяем sqlc для работы с БД

Привет, Хабр! Инструмент, который генерирует производительный и безопасный код для работы с базой данных — миф или реальность? В этой статье обсудим, что такое sqlc, откуда он появился и какие идеи в него заложены. Разберём его возможности и ограничения, а также кейсы, когда он подходит лучше всего.Меня зовут Евгений Конечный, я Cluster Lead в Uzum Market, самом большом маркетплейсе в Узбекистане. В этой статье расскажу про инструмент для кодогенерации, который называется sqlc. Сразу оговорюсь,…

  • суббота, 15 марта 2025 г. в 00:00:09
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