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

Go *
Компилируемый, многопоточный язык программирования
FUSE + Go: ковка собственной виртуальной файловой системы на блочном устройстве

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

Go (Golang) создан для эффективной параллельной и конкурентной работы. Его killer feature — легковесные потоки выполнения, называемые горутины (goroutines), и мощные средства синхронизации. Приглашаю разобраться подробно.
Изучаем Go: руководство для JavaScript-разработчиков. Часть 1

После пяти лет работы JavaScript-разработчиком, занимаясь как фронтендом, так и бэкендом, я провел последний год, осваивая Go для серверной разработки. За это время мне пришлось переосмыслить многие вещи. Различия в синтаксисе, базовых принципах, подходах к организации кода и, конечно, в средах выполнения — все это довольно сильно влияет не только на производительность приложения, но и на эффективность разработчика.
Интерес к Go в JavaScript-сообществе тоже заметно вырос. Особенно после новости от Microsoft о том, что они переписывают официальный компилятор TypeScript на Go — и обещают ускорение до 10 раз по сравнению с текущей реализацией.
Эта статья — своего рода путеводитель для JavaScript-разработчиков, которые задумываются о переходе на Go или просто хотят с ним познакомиться. Я постарался структурировать материал вокруг ключевых особенностей языка, сравнивая их с привычными концепциями из JavaScript/TypeScript. И, конечно, расскажу о "подводных камнях", с которыми столкнулся лично — с багажом мышления JS-разработчика.
Барьеры памяти «Golang»

Данная статья направлена на повышение уровня понимания принципов работы барьеров памяти, которые лежат в основе атомарных операций. Она не описывает историю и первопричины появления данного механизма, а служит объяснением основных подходов.
Идеей было донести простыми словами и примерами механизмов работы барьеров памяти, поэтому в данной статье нет углубления в синтаксис ассемблер команд или архитектур процессоров.
Резервные копии PostgreSQL: сравнение скорости pg_dump в разных форматах и с разными уровнями сжатия

Я сделал резервную копию через pg_dump
и восстановился из неё 22 раза. Резервные копии делал в 4 разных форматах с использованием от 1 до 7 уровней сжатия под каждый формат. Записал результаты и сделал сравнение разных видов, чтобы понимать, какие способы более эффективны для моего сценария использования.
Детали и замеры — ниже.
Как Go зависает на Windows в CancelIoEx: история одного бага

Я не считаю себя специалистом по Go и лишь изредка обращался к этому языку, но хочу поделиться историей об одном баге на стыке Go и ядра Windows, с которым мне «посчастливилось» столкнуться.
Баг до сих пор остаётся актуальным (issue на GitHub), хотя есть основания надеяться, что он будет исправлен в следующем релизе Go.
Тем не менее, если звёзды сойдутся неудачно и ваша программа на Go внезапно зависнет у клиента в вызове CancelIoEx
, а воспроизвести и проанализировать проблему не удастся, то, надеюсь, приведённый ниже материал поможет понять её причины и попробовать обойти проблему.
Психанул на неудобный драйвер pgx и написал свою библиотеку. Все как по канонам гошников ) — Golang

После месяцев рутинного сканирования строк в структуры я решил: «Хватит это терпеть!» и психанув, создал обертку, которая:
✔ Автоматизирует скан — никаких rows.Scan(), просто передаете структуру
✔ Работает с любыми вложенностями — даже сложные JSON-поля парсятся без боли
✔ Не тормозит — минимальные накладные расходы, вся мощь pgx сохраняется
✔ Подходит для любого проекта — можно внедрять постепенно
👉 Это не просто библиотека — это мой ответ на боль всех gopher'ов!
Практический CQRS и Event Sourcing на Go

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

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

Привет! Меня зовут Роман Чечёткин, я разработчик в команде «Платформа коммуникаций» в Ozon Tech. Наша платформа предоставляет возможность другим командам отправлять различные сообщения в личные кабинеты пользователей.
Сегодня хочу рассказать о задаче, которая встала перед нами — долгосрочное хранение всех сообщений (смс, электронные письма, пуши, уведомления), которые пользователь получил от Ozon.
Хватит спрашивать у синьоров джуниорские вопросы на собеседованиях
Я работаю программистом последние 11 лет: первые 5 лет как PHP-разработчик, а последние 6 лет как Go-разработчик. Недавно я сходил на с десяток собеседований, и они меня очень сильно разочаровали.
Полиморфизм в JSON в Go

Полиморфная сериализация 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
.
Ближайшие события
VS Code: 5 интересных функций и расширений, меняющих подход к разработке

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

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

Прежде всего хочу сказать, что я не являюсь никаким специалистом, даже джуновского лвла, просто безработный студент, пишущий на коленке свои пет-проекты. И код, и тем более архитектура далеки от идеала. Однако, я думаю, некоторые моменты, о которых я буду рассказывать далее в статье, могут быть интересны полноценным разработчикам как бэкенда, так и ИИ-агентов.
С технологией RAG я познакомился около года назад на хакатоне, посвященном обработке естественного языка. Там мы с командой разработали его простейшую имплементацию, с которой и заняли «почетное» 5-е место. Подробно об этой технологии в данной статье рассказывать я не буду, так как статья не о ней; вкратце - RAG позволяет генерировать ответы LLM на основании базы контекста, необходимый фрагмент которой вместе с запросом передается языковой модели на вход.
Шло время, мои навыки росли, я полностью пересел с Python на Go, начал интересоваться больше бэкенд-разработкой и думал какой бы пет-проект мне написать. Идея приложения, связанного с ИИ на Go кажется сперва странной: язык предназначен для совершенно других целей, отсутствуют хорошие библиотеки сообщества, вроде Langchain (langchaingo слишком слаба). И с одной стороны, если бы идеей было обучить собственную языковую модель - это было бы действительно глупо. Но чем больше я думал о разработке RAG и ИИ-агентов, тем больше понимал, что это чисто бэкенд задача, с нулем машинного обучения под капотом.
Эта мысль натолкнула меня на следующие рассуждения: зачем использовать низкопроизводительный Python, если можно создать более эффективное ИИ-приложение на Go, к тому же с лучшей масштабируемостью? Конечно, в основном это дело привычки и наличия в питоне необходимых библиотек, да и мало кто из-за небольшого прироста производительности пойдет переписывать всех ИИ-агентов на Go, Rust или C++. Но для меня это и стало хорошей идеей для своего странненького пет-проекта.
Погружение в Go: подборка ресурсов для новичков и продолжающих

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

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

На заре появления первых компьютеров и программ перед инженерами встала проблема представления привычных им букв, цифр и знаков в понятный компьютеру формат. Нужно было придумать, как запрограммировать компьютер так, чтобы он мог хранить, например, строку «Hello», ведь символы «h», «e», «l», «o» ему непонятны — это не на его языке. Да и вообще таким понятием как «символ» компьютер не владеет.
Язык компьютера — это биты.
Бит — это один разряд двоичного кода (двоичная цифра). Может принимать только два взаимоисключающих значения: «да» или «нет», «1» или «0», «включено» или «выключено».
Да, в самой своей сути все компьютеры оперируют только битами — единицами и нулями. Вся информация, с которой работает компьютер, в конечном итоге представлена в виде единиц и нулей. То есть никакими буквами или прочими символами мы напрямую с компьютером обмениваться не можем — он просто нас не поймёт.
Но если бит может содержать всего одно из двух значений — 1 или 0, как с его помощью общаться с компьютером? Это все равно что пытаться общаться с людьми, используя лишь две буквы. Тут на помощь приходят байты.
Байт — это совокупность бит, обрабатываемых компьютером одновременно. Если в качестве метафоры считать биты за буквы, то байты можно условно рассматривать в качестве слов. Байт состоит из восьми бит, каждый из которых содержит 0 или 1.
Строим PaaS внутри крупной компании: опыт ВКонтакте

Со временем в каждой крупной IT-компании накапливается критическая масса однотипных решений для рутинных задач, а также сервисы и библиотеки, написанные на разных языках. Сначала кажется, что это круто: каждый волен выбирать инструменты под себя и свою задачу. А потом становится очевидно, что разнообразие — это хорошо, но не для поддержки и развития десятков, а то и сотен продакшен-сервисов. Мы ВКонтакте остро ощутили это сейчас, когда масштабно перестраиваемся и переходим к сервисной архитектуре.
Вклад авторов
divan0 1343.0quasilyte 855.5JustSkiv 540.0mkevac 505.0badcasedaily1 491.0AloneCoder 370.4varanio 344.6tioffs 327.0sqshq 296.0ru_vds 278.0