Обновить
85.49

Go *

Компилируемый, многопоточный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Психанул на неудобный драйвер pgx и написал свою библиотеку. Все как по канонам гошников ) — Golang

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров4K

После месяцев рутинного сканирования строк в структуры я решил: «Хватит это терпеть!» и психанув, создал обертку, которая:

✔ Автоматизирует скан — никаких rows.Scan(), просто передаете структуру
✔ Работает с любыми вложенностями — даже сложные JSON-поля парсятся без боли
✔ Не тормозит — минимальные накладные расходы, вся мощь pgx сохраняется
✔ Подходит для любого проекта — можно внедрять постепенно

👉 Это не просто библиотека — это мой ответ на боль всех gopher'ов!

Читать далее

Практический CQRS и Event Sourcing на Go

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров3.3K

Event Sourcing и CQRS — это мощные архитектурные подходы, которые заменяют традиционное CRUD-управление состоянием на журналирование событий и разделение операций записи и чтения для масштабируемости и надежности. Вместо прямого изменения данных система сохраняет каждое изменение как событие, что обеспечивает полный аудит, контроль конкурентности и гибкость в обработке данных.

Читать далее

Быстро — не всегда хорошо: рейтлимиты в мультикластерном окружении

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров1.6K

Всем привет! Кажется, настало время поговорить о том, как внедрялись ограничители частоты запросов на бэкенд в Wildberries. В статье — о том, с какими трудностями мы столкнулись на этом благородном пути и как прошли через четыре схемы реализации — от простейшей in-memory до собственных gRPC-сервисов. Не обойдём вниманием и парочку лайфхаков ;) Например, с помощью рейтлимитов мы неожиданно решили проблему плавного отключения старых версий API.

Меня зовут Дмитрий Виноградов, и я лид команды публичного API Wildberries. До этого почти 18 лет занимался промышленной автоматизацией в Schneider Electric — от программирования контроллеров и embedded-устройств до собственных SCADA-систем. Хочешь не хочешь, а научишься делать красивые интерфейсы :)

Читать далее

Построение долговечного хранилища данных с помощью HDFS

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров4.4K

Привет! Меня зовут Роман Чечёткин, я разработчик в команде «Платформа коммуникаций» в Ozon Tech. Наша платформа предоставляет возможность другим командам отправлять различные сообщения в личные кабинеты пользователей.

Сегодня хочу рассказать о задаче, которая встала перед нами — долгосрочное хранение всех сообщений (смс, электронные письма, пуши, уведомления), которые пользователь получил от Ozon.

Читать далее

Хватит спрашивать у синьоров джуниорские вопросы на собеседованиях

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров34K

Я работаю программистом последние 11 лет: первые 5 лет как PHP-разработчик, а последние 6 лет как Go-разработчик. Недавно я сходил на с десяток собеседований, и они меня очень сильно разочаровали.

Читать далее

Полиморфизм в JSON в Go

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров3.6K

Полиморфная сериализация JSON — частая задача при проектировании API, UI-моделей или событийных структур. Пример структуры:

[
{"type": "text", "content": "hello"},
{"type": "image", "url": "pic.jpg"}
]

В Go такие данные принято представлять с помощью интерфейсов. Однако стандартный пакет encoding/json не умеет автоматически сериализовать и десериализовать структуры с полем-дискриминатором (например, "type"), которое определяет конкретный подтип. Приходится либо использовать громоздкие конструкции вроде map[string]any или json.RawMessage, либо вручную реализовывать интерфейсы json.Marshaler и json.Unmarshaler с разбором каждого варианта — такой подход быстро становится неудобным и слабо масштабируется.

Для решения этой задачи были разработаны две библиотеки:

poly — обёртка с использованием дженериков;

polygen — генератор кода, расширяющий возможности poly.

Почему 2 библиотеки?

VS Code: 5 интересных функций и расширений, меняющих подход к разработке

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров33K

Visual Studio Code прочно закрепился как один из самых популярных редакторов кода, и не зря. Его гибкость, производительность и огромная экосистема расширений делают его незаменимым инструментом для миллионов разработчиков. Однако, даже опытные пользователи зачастую не догадываются о некоторых его «скрытых» возможностях, которые могут кардинально изменить привычный рабочий процесс и значительно повысить продуктивность.

В этой статье мы рассмотрим 5 интересных функций и расширений VS Code, без которых, возможно, вы уже не сможете представить свою разработку.

Читать далее

Тестируем веб приложение на Go

Время на прочтение6 мин
Количество просмотров3.6K

Тестирование — важнейший аспект разработки программного обеспечения, особенно для веб‑приложений. В Go тестирование встроено в язык и предоставляет мощные инструменты для написания и выполнения тестов. В этой статье мы рассмотрим поток веб-приложения на Go, как писать модульные тесты для каждого слоя приложения.

Читать далее

Полноценное RAG-приложение на Go — безумие?

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров6.4K

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

С технологией RAG я познакомился около года назад на хакатоне, посвященном обработке естественного языка. Там мы с командой разработали его простейшую имплементацию, с которой и заняли «почетное» 5-е место. Подробно об этой технологии в данной статье рассказывать я не буду, так как статья не о ней; вкратце - RAG позволяет генерировать ответы LLM на основании базы контекста, необходимый фрагмент которой вместе с запросом передается языковой модели на вход.

Шло время, мои навыки росли, я полностью пересел с Python на Go, начал интересоваться больше бэкенд-разработкой и думал какой бы пет-проект мне написать. Идея приложения, связанного с ИИ на Go кажется сперва странной: язык предназначен для совершенно других целей, отсутствуют хорошие библиотеки сообщества, вроде Langchain (langchaingo слишком слаба). И с одной стороны, если бы идеей было обучить собственную языковую модель - это было бы действительно глупо. Но чем больше я думал о разработке RAG и ИИ-агентов, тем больше понимал, что это чисто бэкенд задача, с нулем машинного обучения под капотом.

Эта мысль натолкнула меня на следующие рассуждения: зачем использовать низкопроизводительный Python, если можно создать более эффективное ИИ-приложение на Go, к тому же с лучшей масштабируемостью? Конечно, в основном это дело привычки и наличия в питоне необходимых библиотек, да и мало кто из-за небольшого прироста производительности пойдет переписывать всех ИИ-агентов на Go, Rust или C++. Но для меня это и стало хорошей идеей для своего странненького пет-проекта.

Читать далее

Погружение в Go: подборка ресурсов для новичков и продолжающих

Время на прочтение3 мин
Количество просмотров15K

Привет, Хабр! Пару лет назад мы уже выпускали подборку книг, подкастов и других ресурсов для изучения языка программирования Go. За это время коллекция полезных материалов подросла, и пришло время поделиться продолжением.

Новая подборка ждет вас под катом. Сохраняйте себе и отправляйте коллегам — пригодится как новичкам, так и опытным специалистам.

Читать далее

Медиа-сервер на основе Telegram-бота / Питонист пробует Go

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров6.9K

Хочу поделиться историей создания Telegram-бота, который изменил мой подход к домашнему кинотеатру. Все началось с банальной лени — мне надоело каждый раз заходить на компьютер, искать торрент, скачивать фильм, а потом думать, как его передать на телевизор.

Идея была простая: что если можно будет просто отправить ссылку в Telegram и получить готовый к просмотру фильм?

В этой статье я расскажу, как из простой идеи вырос медиа-сервер с DLNA, как я переходил с Python на Go и почему теперь этим ботом пользуется вся моя семья и гости.

Читать далее

Подробно о строках в Go

Уровень сложностиПростой
Время на прочтение13 мин
Количество просмотров7.1K

На заре появления первых компьютеров и программ перед инженерами встала проблема представления привычных им букв, цифр и знаков в понятный компьютеру формат. Нужно было придумать, как запрограммировать компьютер так, чтобы он мог хранить, например, строку «Hello», ведь символы «h», «e», «l», «o» ему непонятны — это не на его языке. Да и вообще таким понятием как «символ» компьютер не владеет.

Язык компьютера — это биты.

Бит — это один разряд двоичного кода (двоичная цифра). Может принимать только два взаимоисключающих значения: «да» или «нет», «1» или «0», «включено» или «выключено».

Да, в самой своей сути все компьютеры оперируют только битами — единицами и нулями. Вся информация, с которой работает компьютер, в конечном итоге представлена в виде единиц и нулей. То есть никакими буквами или прочими символами мы напрямую с компьютером обмениваться не можем — он просто нас не поймёт.

Но если бит может содержать всего одно из двух значений — 1 или 0, как с его помощью общаться с компьютером? Это все равно что пытаться общаться с людьми, используя лишь две буквы. Тут на помощь приходят байты.

Байт — это совокупность бит, обрабатываемых компьютером одновременно. Если в качестве метафоры считать биты за буквы, то байты можно условно рассматривать в качестве слов. Байт состоит из восьми бит, каждый из которых содержит 0 или 1.

Читать далее

Строим PaaS внутри крупной компании: опыт ВКонтакте

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров3.4K

Со временем в каждой крупной IT-компании накапливается критическая масса однотипных решений для рутинных задач, а также сервисы и библиотеки, написанные на разных языках. Сначала кажется, что это круто: каждый волен выбирать инструменты под себя и свою задачу. А потом становится очевидно, что разнообразие — это хорошо, но не для поддержки и развития десятков, а то и сотен продакшен-сервисов. Мы ВКонтакте остро ощутили это сейчас, когда масштабно перестраиваемся и переходим к сервисной архитектуре. 

Читать далее

Ближайшие события

Масштабирование stateful приложений

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров2.5K

Всем привет! В этой статье я хочу разобрать довольно‑таки интересную и в то же время сложную тему — «Поддержание консистентного состояния в stateful сервисах при масштабировании».

Читать далее

Валидация данных в Go с go-playground/validator: полное руководство

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров4.4K

Валидация входных данных — критически важная часть любого приложения. Без неё ваше приложение подвержено:

— паникам и ошибкам из-за неожиданных nil или невалидных значений,
— некорректной работе бизнес-логики при обработке невалидных данных,
— уязвимостям безопасности (SQL-инъекции, XSS и др.),
— сложностям в отладке из-за непредсказуемого поведения.

Рассмотрим типичный подход к валидации без специализированных библиотек...

Читать далее

Как добавить GigaChat в проект за 3 шага. Гайд и опенсорс-инструмент

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров4.1K

Привет, Хабр!

В последнее время все больше разработчиков экспериментируют с большими языковыми моделями. GigaChat от Сбера — одна из самых доступных и мощных моделей на российском рынке. У нее есть подробное REST API, которое позволяет интегрировать нейросеть в любой продукт: от телеграм-ботов до сложных корпоративных систем.

Однако, как и при работе с любым серьезным API, прямая интеграция требует решения нескольких рутинных, но важных задач: нужно управлять аутентификацией, обрабатывать жизненный цикл токенов, настраивать повторные запросы. Все это — стандартный бойлерплейт-код, который отвлекает от главной цели — логики самого приложения.

Я столкнулся с этими задачами и, чтобы упростить жизнь себе и другим Go-разработчикам, написал gigago — легковесный и идиоматичный SDK. Его цель — взять на себя всю "грязную работу" и позволить вам добавить GigaChat в проект буквально за несколько минут.

Читать далее

Приложение на Go шаг за шагом. Часть 3: форматирование и обёртывание ответов JSON

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров4.1K

Привет! Я Владислав Попов, автор курса «Go-разработчик с нуля» в Яндекс Практикуме. В серии статей я хочу помочь начинающим разработчикам упорядочить знания и написать приложение на Go с нуля: мы вместе пройдём каждый шаг и создадим API для получения информации о книгах и управления ими. 

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

Читать далее

Каналы (channels) в Go

Время на прочтение15 мин
Количество просмотров7K

Каналы — инструмент для передачи данных между горутинами. Это фундаментальная концепция, на которой строится вся модель параллелизма в языке, и одна из ключевых особенностей, которая делает Go уникальным среди современных языков программирования. За внешней простотой синтаксиса ch <- value и <-ch скрывается сложная реализация, которая включает в себя кольцевые буферы, системы очередей, механизмы блокировки и тесную интеграцию с планировщиком горутин. В этой статье разберем их внутреннее устройство на уровне runtime и рассмотрим паттерны использования.

Читать далее

Алгоритмы для работы с большими данными в Go: HyperLogLog и Count-Min Sketch

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров4.5K

Алгоритмы для работы с большими данными

Всем привет! Для начала давайте разберем что такое вообще Алгоритмы для работы с большими данными, основная суть алгоритмов для работы с большими данными  — это эффективная обработка огромных объёмов информации при минимальных вычислительных ресурсах (памяти, CPU, диске). Их суть — жертвовать точностью ради скорости и масштабируемости.

Читать далее

Большой разбор Строк Go → «Типы и структуры данных Go»

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров3.8K

Меня зовут Рома и это вторая часть цикла «Типы и структуры данных Go». В этот раз будем разбираться с внутренностями строк. Говорить будем только о том, что есть в базе языка, то есть без дополнительных функций из стандартной, экспериментальной или какой-либо другой библиотеки.

Приятного аппетита!

Строчить далее

Вклад авторов